自定义命令中的 \verb

自定义命令中的 \verb

我有\newcommand\dd[2]{\item[\texttt{#1}] #2},后来我也有

\dd{bc}{text \verb#$(echo 5+4 | bc)# text \verb#$((5+4))# text}

我得到了

! You can't use `macro parameter character #' in math mode.
<argument> ...nicht mit \verb ##$(echo 5+4 | bc)##
rechnen, sondern die neue...
l.74 ...ekten Rechnen, \verb#$((5+4))#, benutzen.}
Sorry, but I'm not programmed to handle this case;
I'll just pretend that you didn't ask for it.
If you're in the wrong mode, you might be able to
return to the right one by typing `I}' or `I$' or `I\par'.

我怎样才能将逐字逐句地放入我的命令中,而不会让命令错误地解释它?

答案1

我不确定我是否完全理解了您想要实现的目标,但我认为最简单的解决方案可能是以下模型。请注意,必须通过在美元符号前添加反斜杠来“转义”美元符号;另一方面,没有必要明确引入逐字字符串。

\documentclass{article}
\newcommand\dd[2]{\item[\texttt{#1}] #2}
\begin{document}
\begin{description}
\dd{bc}{text \texttt{\$(echo 5+4 $|$ bc)} text \texttt{\$((5+4))} text}
\end{description}
\end{document}

在此处输入图片描述

答案2

正如评论中提到的,verbatim或者它的简称\verb完全是另一回事。如果你必须将内容作为参数传递verbatim,你可以考虑fancyvrb解决方法。

您可以使用以下方式fancyvrb保存和恢复您的命令:verbatim

\usepackage{fancyvrb}% http://ctan.org/pkg/fancyvrb
\DefineShortVerb{\#}% # denotes verbatim opening/closing character
\SaveVerb{VerbA}#(echo 5+4 | bc)#
\SaveVerb{VerbB}#$((5+4))#

(echo 5+4 | bc)将按原样存储在VerbA$((5+4))VerbB,稍后可以分别通过\UseVerb{VerbA}和使用(恢复) \UseVerb{VerbB}。这是一个最小的工作示例:

在此处输入图片描述

\documentclass{article}
\usepackage{fancyvrb}
\newcommand\dd[2]{\item[\texttt{#1}] #2}
\begin{document}
\DefineShortVerb{\#}% # denotes verbatim opening/closing character
\SaveVerb{VerbA}#(echo 5+4 | bc)#
\SaveVerb{VerbB}#$((5+4))#
\begin{description}
  \dd{bc}{text \UseVerb{VerbA} text \UseVerb{VerbB} text}
\end{description}
\end{document}

编辑:可以使用类似的解决方法verbdef包裹。它提供了逐字内容的\verbdef{<cmd>}{<verb>}定义。以下 MWE 产生与上述相同的输出:\<cmd><verb>

\documentclass{article}
\usepackage{verbdef}
\newcommand\dd[2]{\item[\texttt{#1}] #2}
\begin{document}
\verbdef\VerbA{(echo 5+4 | bc)}
\verbdef\VerbB{$((5+4))}
\begin{description}
  \dd{bc}{text \VerbA\ text \VerbB\ text}
\end{description}
\end{document}

答案3

现在你可以使用更“强大”\Verbfvextra包裹。

注意,\Verb|...|和都\Verb{...}受支持(有一些限制)。另外,当用作参数时,不要用作#分隔符。

\documentclass{article}
\usepackage{fvextra}
\newcommand\dd[2]{\item[\texttt{#1}] #2}

\begin{document}
\begin{description}
  \dd{bc}{text \Verb{$(echo 5+4 | bc)} text \Verb{$((5+4))} text}
\end{description}
\end{document}

在此处输入图片描述

答案4

使用以下内容:

\newcommand\dd[2]{\texttt{\detokenize{#1}} #2}

这将逐字打印#1。

相关内容