宏内逐字逐句带颜色

宏内逐字逐句带颜色

考虑以下最小的非工作示例(用编译注释该行\test{..}。我想\verb+something+在我的\test{}环境中有一个。我该如何实现呢?

\documentclass{article}

\usepackage{xcolor,fancyvrb}
\newcommand{\test}[1]{{\color{blue}#1}}
\usepackage{siunitx,booktabs}
\begin{document}
This works \verb+\num{6.022e-23}+ 

\test{This is a test of a \verb+verb+}
\end{document}

答案1

可以使用cprotect,但在使用之前应该三思\verb,也许,\texttt` 就足够了。

\documentclass{article}

\usepackage{xcolor,cprotect}

\newcommand{\test}[1]{\textcolor{blue}{#1}}

\begin{document}

This works \verb+\num{6.022e-23}+

\cprotect\test{This is a test of a \verb+\num{6.022e-23}+}

\end{document}

在此处输入图片描述

如果有多个\test包含的情况\verb,您可能希望使其自动应用\cprotect

\documentclass{article}

\usepackage{xcolor,cprotect}

\newcommand{\test}[1]{\textcolor{blue}{#1}}
\cMakeRobust\test

\begin{document}

This works \verb+\num{6.022e-23}+

\test{This is a test of a \verb+\num{6.022e-23}+}

\end{document}

答案2

正如我所评论的,\verb既不能出现在宏定义中,也不能出现在参数中。

但是,根据您的需要,这可能就足够了。可以verbbox预先保存一个,并将其作为参数传递。

\documentclass{article}

\usepackage{xcolor,verbatimbox}
\newcommand{\test}[1]{{\color{blue}#1}}
\usepackage{siunitx,booktabs}
\begin{document}
This works \verb+\num{6.022e-23}+ 

\begin{verbbox}verb\end{verbbox}%
\test{This is a test of a \theverbbox}
\end{document}

在此处输入图片描述

如果想要蓝色的动词,则verbbox可以将其保存为{\color{blue}\begin{verbbox}verb\end{verbbox}}%

相关内容