使用 \verb|| 定义命令

使用 \verb|| 定义命令

有没有办法使用环境定义一些自定义命令\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但另一个参数我们省略,让\verbscan 自行前进。

\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

这是一项任务newverbs

\documentclass{article}
\usepackage[x11names]{xcolor}
\usepackage{newverbs}

\newverbcommand{\Rcode}{\color{SteelBlue4}}{}

\begin{document}

Standard \verb+\verb+: \verb+my_data.txt+ and text after

With \verb+\Rcode+: \Rcode+my_data.txt+ and text after

\end{document}

在此处输入图片描述

答案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被纳入到论证之中。

相关内容