Cómo poner la tubería | como comando de trabajo en una macro \newcommand

Cómo poner la tubería | como comando de trabajo en una macro \newcommand

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 \TeXmago, 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 \evcomando.

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

\verbtiene 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 \verblo 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 \evser |? En primer lugar, esto |no se puede cambiar para que signifique "fin de grupo", pero este es el menor de los problemas: \evse examinaría como una cadena formada por tresnormalpersonajes, porque \verbestá 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 \greenverbmacro con la misma sintaxis que \verb. El segundo método define \colorverbque 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}

ingrese la descripción de la imagen aquí

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}

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

información relacionada