Como colocar o cano | como um comando de trabalho em uma macro \newcommand

Como colocar o cano | como um comando de trabalho em uma macro \newcommand

Sou um cara preguiçoso e gosto de usar novos comandos com frequência. Depois de finalizar vou substituir pelo código original.

Eu gostaria de ter uma abreviatura para o \verb|.. texto aqui .. |

Mas algo está errado aqui - não sei como consertar meu 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 não sou um \TeXmago, mas sim um iniciante, cada dica é muito apreciada!

Esqueci: trabalhando com PDFLateX no Linux.

Cumprimentos!

Responder1

Os comandos literais precisam encontrar a string final sem expandir os comandos, portanto, você não pode ocultá-la em um \evcomando.

Você pode usar o fancyvrb para definir o texto curto, consulte a documentação:

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

Responder2

\verbtem que saber onde terminar, mas enquanto isso tem que desabilitar todas as interpretações especiais de caracteres, incluindo a barra invertida.

Poderíamos pensar em delimitar o material com ocorda \ev, mas isso seria muito complicado. Delimitar com um único caractere que não esteja no material a ser impresso literalmente é muito mais simples. Mas isso funciona de uma forma muito indireta.

Quando o LaTeX encontra, \verbele examina o próximo caractere emuda seu código de categoriapara significar “fim do grupo”. Assim, ao encontrar outra instância dele, a natureza de fim de grupo do personagem desativará automaticamente todas as configurações especiais necessárias para o modo literal. Qual é o problema em definir \evser |? Em primeiro lugar, isto |não pode ser alterado para significar “fim de grupo”, mas este é o menor dos problemas: \evseria examinado como uma cadeia composta por trêsnormalpersonagens, porque \verbestá em vigor! Portanto, não pode ser interpretado como um comando.

Se o seu objetivo é colorir material textual embutido, existem maneiras mais simples. Mostro duas: uma com uma única cor, definindo uma \greenverbmacro com a mesma sintaxe do \verb. O segundo método define \colorverbque toma como argumento uma especificação de cor e então chama um comando genérico de cor literal.

\documentclass{article}
\usepackage{xcolor}
\usepackage{newverbs}

\newverbcommand{\greenverb}{\color{green!40!black}}{}

\begin{document}

Putting \greenverb|hurz| works

\end{document}

insira a descrição da imagem aqui

Se precisar de várias cores, você pode definir um comando genérico e depois especializá-lo. Por favor, use um prefixo mais detalhado do que my(seu nome, uma string aleatória ou qualquer outra coisa) para minimizar a possibilidade de conflitos.

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

insira a descrição da imagem aqui

Responder3

Isso não é verdade literalmente, mas chega bem perto. Por exemplo, o balanceamento de chaves é necessário para a entrada.

Sintaxe é o que o usuário solicitou: \bv....\ev. Além disso, o material literal pode incluir quebras de linha e parágrafo (linha vazia).

Um lugar em que produzirá uma saída inadequada é se uma \bvlinha de entrada terminar com uma barra invertida solitária \. Outra saída inadequada surgirá se os caracteres catcode-1,2 tiverem sido alterados...eles continuarão a ser apresentados como {e }, a menos que etapas adicionais sejam tomadas.

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

insira a descrição da imagem aqui

informação relacionada