มีวิธีง่ายๆในการเข้าสู่โหมด texttt เช่น $ สำหรับโหมดคณิตศาสตร์หรือไม่?

Aug 19 2020

เมื่อฉันต้องการที่จะอ้างถึงตัวแปรทางคณิตศาสตร์กล่าวว่าดัชนีบางอย่างiผมก็ล้อมรอบมันกับดอลลาร์ (เช่น$i$) \begin{math}i\end{math}เมื่อเทียบกับการเขียน

มีตัวเลือกที่คล้ายกันสำหรับtextttโหมดเช่น§i§เพื่อแทนที่\texttt{i}หรือไม่?

คำตอบ

27 egreg Aug 19 2020 at 23:04

คุณสามารถใช้§เป็นตัวคั่นโดยไม่มีผลกับอักขระอื่นโดยใช้ไบต์แรกเดียวกัน

\documentclass{article}
\usepackage{newunicodechar}

\newunicodechar{§}{\makeabbreviationtt}
\def\makeabbreviationtt#1§{\texttt{#1}}

\begin{document}

This is §monospaced§. This doesn't affect ©, ¶
and other similar UTF-8 characters.

You can also do §¶§

\end{document}

22 DavidCarlisle Aug 19 2020 at 18:27

ไม่ใช่สำหรับ\textttแต่สำหรับ\verbการแจกจ่ายพื้นฐานรวมถึงshortvrbแพ็คเกจที่อนุญาตให้คุณกำหนดชวเลข

\documentclass{article}
\usepackage{shortvrb}
\MakeShortVerb|


\begin{document}
  aaaa |z|  aaa
\end{document}
15 StevenB.Segletes Aug 19 2020 at 18:20
\documentclass{article}
\def§#1§{\texttt{#1}}
\begin{document}
roman §tt text§ back to roman
\end{document}

อย่างไรก็ตามตามที่ David ชี้ให้เห็นในความคิดเห็นเนื่องจาก§ไม่ใช่อักขระแบบไบต์เดียว แต่เป็นอักขระ UTF-8 ที่ขยาย (หลายไบต์) วิธีนี้จะลบอักขระ UTF-8 ใด ๆ ที่ขึ้นต้นด้วยคำนำหน้าเดียวกัน ส่งผลให้เกิดข้อผิดพลาดหากมีการใช้อักขระเหล่านั้น (เช่น©)

ดังนั้นหากคุณต้องการโซลูชันประเภทนี้จะเป็นการดีกว่าถ้าเลือกตัวคั่นเป็นอักขระ ASCII แบบไบต์เดียวและทำให้มันทำงานได้:

\documentclass{article}
\catcode`|=\active
\def|#1|{\texttt{#1}}
\begin{document}
roman |tt text| back to roman
\end{document}

ข้อเสียตรงนี้คือคุณสูญเสียการใช้|เป็นอักขระป้อนข้อมูลปกติ ดังนั้นคุณสามารถจินตนาการและสร้างการหลบหนีในคำจำกัดความเพื่อที่||จะสะท้อนเสียงเดี่ยว|ที่จะเรียงพิมพ์:

\documentclass{article}
\usepackage[T1]{fontenc}
\let\svvert|
\catcode`|=\active
\def|#1|{\ifx\relax#1\relax\expandafter\svvert\else\texttt{#1}\fi}
\begin{document}
roman |tt text| back to roman || or $y =||x||$ and |then back to texttt|.
\end{document}