如何使用 cprotect 创建在宏定义中逐字使用的最小工作示例?

如何使用 cprotect 创建在宏定义中逐字使用的最小工作示例?

保护可以根据包规范在宏定义中使用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}

相关内容