我有\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
现在你可以使用更“强大”\Verb
的fvextra
包裹。
注意,\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。