¿Existe una manera fácil de ingresar al modo texttt, como $ para el modo matemático?

Aug 19 2020

Cuando quiero referirme a una variable matemática, digamos algún índice i, simplemente lo rodeo con dólares (es decir, $i$) en lugar de escribir \begin{math}i\end{math}.

¿Existe alguna opción similar para el textttmodo, por ejemplo §i§, para reemplazar \texttt{i}?

Respuestas

27 egreg Aug 19 2020 at 23:04

Puede usarlo §como delimitador sin afectar a otros caracteres que usan el mismo primer byte.

\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

No para \textttpero para \verbla distribución base incluye shortvrbpaquete que le permite definir una abreviatura

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

Sin embargo, como David señala en los comentarios, debido a §que no es un carácter de un solo byte, sino un carácter UTF-8 extendido (multibyte), este enfoque eliminará cualquiera de los caracteres UTF-8 que comiencen con el mismo prefijo, dando como resultado un error, si se utilizan esos caracteres (como ©).

Por lo tanto, si quisiera este tipo de solución, sería mejor elegir el delimitador como un carácter ASCII de un solo byte y activarlo:

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

La desventaja aquí es que pierde el uso de |como carácter de entrada normal. Por lo tanto, podría hacerse elegante y crear un escape en la definición, de modo que ||juntos se hagan eco de un solo |para componerse:

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