什么时候逐字内容是绝对必要的?

什么时候逐字内容是绝对必要的?

第 9 项这个答案具有典型 LaTeX 错误的文档说:

\verb和朋友都很微妙,应该小心处理。它涉及类别代码的高级主题,也许在 TeX FAQ 条目中描述得最好为什么逐字在...内不起作用?以及适当的解决方案/替代方案。最值得注意的是问自己是否真的有必要使用逐字记录。

说实话,我大部分时候使用的\verb只是一个快捷方式,用于进行所有必要的 catcode 更改并切换到\ttfamily,这似乎可以用“更简单”的宏来完成。有什么\verb特别之处?

答案1

有几种情况\verb可以省去。

假设你正在为一个包编写手册,并且想要排版命令或环境名称;然后是几个定义,例如

\newcommand\cs[1]{\texttt{\string#1}}
\newcommand\env[1]{\texttt{\string\begin\string{#1\string}}}

就可以了。例如:

\documentclass{article}

\DeclareRobustCommand\cs[1]{\texttt{\string#1}}
\DeclareRobustCommand\env[1]{\texttt{\string\begin\string{#1\string}}}

\begin{document}

\section{\cs{\foo} and \env{baz}}

We describe the command \cs{\foo} and the environment \env{baz}.

\end{document}

在此处输入图片描述

如您所见,和都\cs可以\env在章节标题中使用,但您很快就会发现\cs在标题中实际上不起作用,需要更复杂的定义:

\makeatletter
\newcommand\cs[1]{%
  \ifx\protect\@typeset@protect
    \texttt{\string#1}%
  \else
    \string\cs{\noexpand\string\string#1}%
  \fi
}
\makeatother

这样.aux文件就会有正确的注释

\@writefile{toc}{\contentsline {section}{\numberline {1}\cs{\foo} and \env  {baz}}{1}}

通常可以通过避免在参数中使用反斜杠来简化这一过程:

\DeclareRobustCommand\cs[1]{\texttt{\symbol{`\\}#1}}

但输入将是

We describe the command \cs{foo} and the environment \env{baz}.

ltugboat.cls这是采取的方法

\DeclareRobustCommand{\cs}[1]{{\tt \char`\\#1}}
\DeclareRobustCommand{\tubbraced}[1]{\mbox{\texttt{\char`\{#1\char`\}}}}
\DeclareRobustCommand{\env}[1]{\cs{begin}\tubbraced{#1}}

(是的,\tt我希望他们有一天会改变这一点)。

软件包手册还需要其他功能来解释命令的语法。例如,必须执行以下操作

\cs{\foo}\oarg{optarg}\marg{arg}

在以适当的方式定义\oarg和之后。用\marg

\verb|\foo[optarg]{arg}|

会失去对“元变量”的强调。进入和退出逐字模式比较笨拙

\verb|\foo[|optarg\verb|]{|arg\verb|}|

并且该\marg方法允许我们按照自己的喜好来格式化元变量。

\verb没有地方verbatim必要的? 任何可以用合适的宏完成\verbverbatim获得的功能,但代价是标记。如果我想描述中的代码以ltugboat.cls标记 的错误用法\tt,我应该输入

\begin{verbatim}
\DeclareRobustCommand{\cs}[1]{{\tt \char`\\#1}}
\end{verbatim}

或者

\begin{flushleft}\ttfamily
\string\DeclareRobustCommand\string{%
\string\cs\string}[1]\string{\string{%
\string\tt\space\string\char`\string\\\string#1%
\string}\string}
\end{flushleft}

会产生同样的输出吗?

在此处输入图片描述

我毫不怀疑,而且我认为你的看法也是一样的。

相关内容