命令 \verb 的历史

命令 \verb 的历史

最近,我继承了一些 LaTeX 代码,用于包含用 键入的电子邮件地址的简历。此代码片段位于多列环境中(因此它位于几个嵌套的大括号内),我花了一些时间才弄清楚为什么它可以编译但不能。从那时起,我学会了它的工作原理(并且应该使用其他符号作为分隔符),但我对不遵循 语法的 LaTeX 函数感到困惑。所以我的问题如下:\verb}[email protected]}\verb{[email protected]}\verb\name[...]{...}

是否有其他 LaTeX 命令与更常用的命令相比语法出奇地不一致?并且,这些命令\verb最初包含在 TeX 中还是后来添加的?

编辑:谢谢您的回答,如果可以的话,我会选择您的两个答案作为可接受的答案。我喜欢与 TeX 原语进行比较,对我来说,\verb|...|通常用于显示 LaTeX 源代码的事实很好地解释了为什么它与大多数其他函数使用的语法不同。

答案1

在所有语言中,打破正常语法的命令的语法都是不同的。如果语法是,\verb{...}你将无法拥有参数}{

比较 XML 和(有时)HTML 中的 CDATA 构造,其用法与动词非常接近,而与正常元素语法非常不同。

<![CDATA[  <  * <bad xml ]]>

\verb在 LaTeX 中定义,是少数不遵循通常参数语法的命令之一。这可以与 TeX 原语进行比较,每种情况下的语法都大不相同:

{a \over b }不是\frac{a}{b}

\input file不是\input{file}

\hskip 3pt plus 2pt minus 1pt不是\hspace{3pt}

\def\zz#1#2#3#4#5{..}不是\newcommand[5]{....}

ETC。

答案2

您从语法不一致的假设开始\verb,但事实并非如此:

\verb<char><material><char>

几乎<char>任何未出现在<material>要逐字排版的字符。实际上并非如此任何,但完全是;例如,*除非使用变体,否则不允许\verb*。所以\verb**foo*是合法的,但\verb*foo*不是。

“不一致”在于其他命令的语法,但这是必要的,至少如果你认为它\verb主要用于解释 TeX 命令,因此括号,即使是不匹配的括号,也应该被允许<material>

这样做的主要原因是,在 中的特殊字符<material>必须失去其含义才能排版。因此,\ { } # % &不会以任何方式进行解释。然而,这意味着我们不能用于{}吸收<material>,因为为时已晚。如果括号不出现或成对出现,则可能出现这种情况,但这会限制不允许的情况,例如

\verb|\command{|\meta{arg}\verb|}|

\meta请随意定义)。

Plain TeX 中没有定义“逐字”模式。

相关内容