Есть ли простой способ войти в режим 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}

Однако, как указывает Дэвид в комментариях, поскольку §это не однобайтовый символ, а расширенный (многобайтовый) символ UTF-8, этот подход уничтожит любой из символов UTF-8, начинающихся с того же префикса, приводит к ошибке, если используются эти символы (например, ©).

Итак, если вам нужен этот тип решения, было бы лучше выбрать разделитель как однобайтовый символ ASCII и сделать его активным:

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

Обратной стороной здесь является то, что вы теряете возможность использовать его |как обычный вводимый символ. Таким образом, вы могли бы пофантазировать и встроить в определение escape-последовательность, чтобы ||вместе |отображалось одно, которое нужно набрать:

\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}