保护可以根据包规范在宏定义中使用verbatim
。就像世界上没有提供示例的其他所有东西一样,它在现实生活中不起作用,因此我想要/必须自己做这项工作。为什么
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{cprotect}
\usepackage{fancyvrb}
\begin{document}
\newcommand{\bla}{Like this one: \verb-!@#$%^&*()_+-.}
% same in TeX
%\def\bla{\verb+Yes!+}
\cprotect\bla
\end{document}
不起作用(错误信息是! Forbidden control sequence found while scanning use of \@argdef.
?使用verbatim
环境不起作用(或者起作用,我们会看到......)。
答案1
\cprotect\bla
允许\verb
在 的参数中有\bla
,但由于\bla
没有参数,所以不执行任何操作。
你必须\cprotect
你定义的\bla
:
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{cprotect}
\usepackage{fancyvrb}
\begin{document}
\cprotect{\newcommand{\bla}}{Like this one: \verb-!@#$%^&*()_+-.}
\bla
\end{document}
请参阅手册第 1 部分末尾解释的技巧。
答案2
使用我的新cprotectinside
包。
将“特殊分隔符”声明为/
,然后使用它来包装逐字命令(\verb
)。阅读文档以了解更多详细信息。
%! TEX program = lualatex
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{cprotectinside}
\usepackage{fancyvrb}
\begin{document}
\cprotectinside{/}{
\newcommand{\bla}{Like this one: /\verb-!@#$%^&*()_+-./}
}
\bla
\end{document}