有没有办法使用环境定义一些自定义命令\verb||
?例如,我想写,{\color{SteelBlue4} \verb|my_data.txt|}
因为如果我只使用,使用_
会导致错误\texttt{}
。所以我试着写\newcommand{\Rcode}[1]{{\color{SteelBlue4} \verb|#1|}}
,但这不起作用。有没有办法做到这一点,或者根本不可能?
答案1
的问题在于\verb
,它以特殊方式处理输入,从而防止输入出现在其他命令或命令参数中。例如,这两个命令会给出错误
\newcommand\x{\verb|x|} % will only error once \x is used
\section{\verb|x|}
但是,命令\verb
本身可以出现在另一个命令中。此示例是合法的:
\newcommand\x{y: \verb}
\x|y|
这是因为\verb
这是不是出现在另一个命令内。结合字体\verb
由决定的知识\verbatim@font
,我们可以修补\verb
宏,使其接受可选参数并将其附加到字体设置中。这样,我们就可以\Rcode
以相同的方式定义请求的命令。我们将可选参数传递给,\verb
但另一个参数我们省略,让\verb
scan 自行前进。
\documentclass{article}
\pagestyle{empty}
\usepackage[x11names]{xcolor}
\makeatletter
\let\normalverb=\verb
\let\normalverbatim@font=\verbatim@font
\renewcommand*\verb[1][]{%
\expandafter\def\expandafter\verbatim@font\expandafter{\normalverbatim@font#1}%
\normalverb
}
\makeatother
\newcommand{\Rcode}{\verb[\color{SteelBlue4}]}
\begin{document}
\Rcode|my_data|
\end{document}
答案2
答案3
免责声明:这个答案与我的另一个答案类似https://tex.stackexchange.com/a/638992/250119 除了代码是针对这个特定问题定制的
使用 Ulrich Diez 的\DefineVerbatimToScantokens
使用答案中的https://tex.stackexchange.com/a/629173/250119(注意。转到该答案以了解如何使用该宏,如果您发现答案有用,也许可以投票。不幸的是,据我所知,它目前不在任何包中,因此您必须复制粘贴代码),我们可以执行以下操作:
\documentclass{article}
\usepackage[x11names]{xcolor}
%=== Code of \DefineVerbatimToScantokens ========================
% ... <copy the code from that answer>
%=== End of code of \DefineVerbatimToScantokens =================
\DefineVerbatimToScantokens{\Rcode}{v}{\color{SteelBlue4} \verb|#1|}
\begin{document}
\Rcode|my_data|
\Rcode|!?%\$^+|
\end{document}
还请阅读 xparse.pdf 的文档以了解此处指定的含义v
以及它允许什么%
等等。除了文字 TAB被纳入到论证之中。