参数传递给 \verb|| 环境

参数传递给 \verb|| 环境

我碰巧一遍又一遍地写下下面的代码。

{\color{blue}\verb|>|} {\footnotesize\verb|HI|} 

因此,我想出了下面的代码来使其成为命令。

\newcommand{\result}[2]{%
{\color{#1}\verb|>|} {\footnotesize\verb|#2|} 
}

问题是结果不是我所期望的,有|附加的字符。

可能出了什么问题?我需要保留verbatim环境,因为结果可能包含一些字符,例如$\...

\documentclass{article}

\newcommand{\result}[2]{%
{\color{#1}$>$} {\footnotesize \verb|#2|} 
}

\usepackage{color}

\begin{document}
{\color{blue}\verb|>|} {\footnotesize\verb|HI|} 

\result{red}{HI}

\end{document}

添加

  • 对于原始来源,\verb|>|应该是$>$。我更新了源示例。
  • 根据 Willie 的回答,我修改了命令

    \newcommand{\result}[2]{{\color{#1}$>$} {\footnotesize\texttt{#2}}}

看起来不错,但是multicols环境,footnotesize字体,在打印字符之前留下一些空白。我附上了屏幕截图和源代码。

看来换行符导致了这个问题,通过\mbox在里面添加\texttt,我可以删除空白。

\newcommand{\result}[2]{{\color{#1}$>$} {\footnotesize\texttt{\mbox{#2}}}}

在此处输入图片描述

\documentclass{article}
\usepackage{multicol}
\usepackage{tikz}

\newcommand{\result}[2]{{\color{#1}$>$} {\footnotesize\texttt{\mbox{#2}}}}
\newcommand{\resultp}[2]{{\color{#1}$>$} {\small\texttt{\mbox{#2}}}}
\usepackage{color}

\begin{document}

\begin{multicols*}{2}
\noindent\result{green}{Welcome to my project! These are your args: (a b c)}\\ \result{green}{hello}\\ \result{green}{HI my\string_name}
\vskip 2ex
\noindent\resultp{green}{Welcome to my project! These are your args: (a b c)}\\ \resultp{green}{hello}\\ \resultp{green}{HI}

\end{multicols*}
\end{document}

答案1

我很惊讶它甚至为你编译了(你的测试示例)。在我的安装中

This is pdfTeX, Version
3.1415926-1.40.10 (Web2C 2009) entering extended mode 
(./test.tex 
LaTeX2e <2009/09/24> 
Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, noh yphenation, pinyin, bulgarian, russian, ukrainian, basque, french, loaded. 
(/usr/share/texmf-dist/tex/latex/base/article.cls 
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class 
(/usr/share/texmf-dist/tex/latex/base/size10.clo)) 
(/usr/share/texmf-dist/tex/latex/graphics/color.sty 
(/usr/share/texmf-dist/tex/latex/latexconfig/color.cfg) 
(/usr/share/texmf-dist/tex/latex/graphics/dvips.def) 
(/usr/share/texmf-dist/tex/latex/graphics/dvipsnam.def)) (./test.aux)

! LaTeX Error: \verb illegal in command argument.

See the LaTeX manual or LaTeX Companion for explanation. Type  
H <return>  for immediate help.  ...    

                                                   l.12 \result{red}{HI}

原因是\verb是一个非常脆弱的命令。我链接到的 TeX faq 中的建议是用 替换\verb,当您按上述定义\texttt向 键入参数时,使用来转义有问题的字符。另请参阅\result\string‘字符串命令’

答案2

您还可以\verb使用以下命令定义自己的类似命令xparse

\documentclass{article}
\usepackage{xparse,xcolor}

\NewDocumentCommand\myvrb{O{blue}v}{%
  \textcolor{#1}{\(>\)} \texttt{\footnotesize#2}}

\begin{document}

\myvrb|HI|

\myvrb[red]|HI|

\myvrb|&$#|

\end{document}

答案3

通过一些胁迫手段,逐字可以制作成几乎做你想做的事。“几乎”是因为你必须使用环境而不是命令。

\documentclass{article}

\usepackage{verbatim}
\usepackage{xcolor}

\makeatletter
\newenvironment{result}[1]{%
\def\verbatim@processline{\the\verbatim@line\ }%
\def\@verbatim{\the\every@verbatim
  \obeylines
  \let\do\@makeother \dospecials
  \verbatim@font
}%
\def\endverbatim{\endgroup}%
\noindent
{\color{#1}\texttt{>}}
\footnotesize
\verbatim}{\endverbatim}
\makeatother

\begin{document}

Here are your results:

\begin{result}{red}
greetings
\end{result}

\begin{result}{green}
A load of *@&$!)%*#$
\end{result}

\end{document}

简而言之,我查看了包中的定义verbatim,删除了所有可能插入换行符的内容,从而使 verbatim 环境在一行而不是多行上工作,这意味着它不会以换行符开始或结束。然后我将其放入新环境中,以便旧\begin{verbatim} ... \end{verbatim}构造仍能正常工作。

警告:行上任何多余的内容都会被丢弃(LaTeX 会对此发出警告)。因此,如果您想从环境中\end{result}取出并使输入更像问题中的示例,则代码必须是:\noindentresult

\noindent\begin{result}{red}
greetings
\end{result}
\\
\begin{result}{green}
A load of *@&$!)%*#$
\end{result}

答案4

与 Martin Scharrer 一起灵活实施newverbs

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

\makeatletter
\newverbcommand{\colorverb@verb}{}{\endgroup}
\newcommand{\colorverb}[2][]{%
  \leavevmode\begingroup
  \if\relax\detokenize{#1}\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\color{#2}}%
  {\color[#1]{#2}}%
  \colorverb@verb
}
\makeatother

\begin{document}

\colorverb{green}|abc{\}|

\colorverb{red!20}?abc|}?

\colorverb[HTML]{A021C2}|abc{\}|

\end{document}

在此处输入图片描述

如果您需要使用其用户级功能(如或 ) ,则使用expl3; 加载是可选的。xcolor\definecolor\colorlet

\documentclass{article}

\ExplSyntaxOn

\keys_define:nn { prosseek/flexiverb }
 {
  color .tl_set:N = \l__prosseek_flexiverb_color_tl,
  model .tl_set:N = \l__prosseek_flexiverb_model_tl,
  font .tl_set:N = \l__prosseek_flexiverb_font_tl,
 }

\NewDocumentCommand{\flexiverb}{O{}v}
 {
  \mbox
   {
    \keys_set:nn { prosseek/flexiverb } { #1 }
    \tl_if_empty:VTF \l__prosseek_flexiverb_model_tl
     {
      \color_select:V \l__prosseek_flexiverb_color_tl
     }
     {
      \color_select:VV \l__prosseek_flexiverb_model_tl \l__prosseek_flexiverb_color_tl
     }
    \use:c { verbatim@font }
    \l__prosseek_flexiverb_font_tl
    #2
   }
 }
\cs_generate_variant:Nn \color_select:n { V }
\cs_generate_variant:Nn \color_select:nn { VV }

\ExplSyntaxOff

% how to define a command based on \flexiverb
\NewDocumentCommand{\redverb}{}{\flexiverb[color=red!80]}

\begin{document}

\flexiverb[color=red!80]|abc}|

\redverb|abc}|

\flexiverb[color=A021C2,model=HTML,font=\footnotesize]|abc{\}|

\end{document}

在此处输入图片描述

相关内容