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 \TeX
mago, 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 \ev
comando.
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
\verb
tem 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, \verb
ele 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 \ev
ser |
? Em primeiro lugar, isto |
não pode ser alterado para significar “fim de grupo”, mas este é o menor dos problemas: \ev
seria examinado como uma cadeia composta por trêsnormalpersonagens, porque \verb
está 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 \greenverb
macro com a mesma sintaxe do \verb
. O segundo método define \colorverb
que 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}
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}
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 \bv
linha 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}