Soy un tipo vago y me gusta usar comandos nuevos con frecuencia. Después de finalizar, lo reemplazaré con el código original.
Me gustaría tener una abreviatura para el \verb|..
texto. Va aquí. .. |
Pero algo anda mal aquí; no sé cómo arreglar mi código:
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}
\newcommand\bv{\verb|}
\newcommand\ev{|}
\begin{document}
1. Putting \color{green!40!black} \verb| hurz | \color{black} works
but:
2. Putting \bv hurz \ev fails.
\end{document}
Como no soy un \TeX
mago, sino un principiante, ¡aprecio mucho cada sugerencia!
Lo olvidé: trabajar con PDFLateX en Linux.
¡Saludos!
Respuesta1
Los comandos textuales necesitan encontrar la cadena final sin expandir los comandos, por lo que no puede ocultarla en un \ev
comando.
Puede utilizar fancyvrb para definir palabras breves palabra por palabra, consulte la documentación:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}
\usepackage{fancyvrb}
\DefineShortVerb{\|}
\begin{document}
Putting |\section{abc} hurz| work
\end{document}
Respuesta2
\verb
tiene que saber dónde terminar, pero mientras tanto tiene que desactivar todas las interpretaciones especiales de caracteres, incluida la barra invertida.
Se podría pensar en delimitar el material con elcadena \ev
, pero esto sería muy engorroso. Delimitar con un solo carácter no incluido en el material que se va a imprimir palabra por palabra es mucho más sencillo. Pero esto funciona de una manera muy indirecta.
Cuando LaTeX \verb
lo encuentra, examina el siguiente carácter ycambia su código de categoríaque significa "fin de grupo". Por lo tanto, al encontrar otra instancia del mismo, la naturaleza de fin de grupo del personaje desactivará automáticamente todas las configuraciones especiales necesarias para el modo palabra por palabra. ¿Cuál es el problema de definir \ev
ser |
? En primer lugar, esto |
no se puede cambiar para que signifique "fin de grupo", pero este es el menor de los problemas: \ev
se examinaría como una cadena formada por tresnormalpersonajes, porque \verb
está vigente! Por tanto, no puede interpretarse como una orden.
Si su objetivo es colorear material textual en línea, existen formas más sencillas. Muestro dos: uno de un solo color, definiendo una \greenverb
macro con la misma sintaxis que \verb
. El segundo método define \colorverb
que toma como argumento una especificación de color y luego llama textualmente a un comando genérico de color.
\documentclass{article}
\usepackage{xcolor}
\usepackage{newverbs}
\newverbcommand{\greenverb}{\color{green!40!black}}{}
\begin{document}
Putting \greenverb|hurz| works
\end{document}
Si necesitas varios colores, puedes definir un comando genérico y luego especializarlo. Por favor, utilice un prefijo más detallado que my
(su nombre, una cadena aleatoria o lo que sea) para minimizar la posibilidad de conflictos.
\documentclass{article}
\usepackage{xcolor}
\usepackage{newverbs}
\makeatletter % allow private control sequences
\newverbcommand{\my@colorverb}{\color{\my@verbatimcolor}}{}
\newcommand{\colorverb}[1]{\def\my@verbatimcolor{#1}\my@colorverb}
\makeatother
\newcommand{\greenverb}{\colorverb{green!40!black}}
\newcommand{\blueverb}{\colorverb{blue!80!black}}
\begin{document}
Putting \greenverb|hurz| works
Putting \blueverb|hurz| works
Putting \colorverb{red!80!black}|hurz| works
\end{document}
Respuesta3
Esto no es una verdadera palabra por palabra, pero se acerca bastante. Por ejemplo, se requiere equilibrio de llaves de la entrada.
La sintaxis es la que solicitó el usuario: \bv....\ev
. Además, el material textual puede incluir saltos de línea y de párrafo (línea vacía).
Un lugar donde se producirá una salida inadecuada es si una \bv
línea de entrada termina en una barra invertida solitaria \
. Otro resultado incorrecto surgirá si los caracteres catcode-1,2 se han cambiado... continuarán presentándose como {
y }
, a menos que se tomen medidas adicionales.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern,tokcycle}
\tokcycleenvironment\myverb
{\addcytoks[1]{\string##1}}
{\addcytoks{\{}\processtoks{##1}\addcytoks{\}}}
{\ifx\par##1\addcytoks{\\}\else\addcytoks[1]{\string##1}\fi}
{\addcytoks[1]{\string##1}}
\makeatletter
\def\bv{\begingroup\obeylines\catcode`\%=12%
\long\def\tokencycle##1##2##3##4{\begingroup\let\endtokencycle
\endtokcycraw\aftertokcycle{\the\cytoks\expandafter\endgroup
\expandafter\endgroup\expandafter\tcenvscope
\expandafter{\the\cytoks}}\tokcycraw{##1}{##2}{##3}{##4}}%
\myverb}
\makeatother
\let\ev\endtokcycraw
\begin{document}
\textit{here we} go:
\bv ABc. D &^$% \xyz
\ {ef}g~\\
H#I^_ \ev back t\v{o} normal \today
a
b%
c
\end{document}