有什么理由不使用 \let 将已弃用的控制序列重新定义为当前推荐的控制序列吗?

有什么理由不使用 \let 将已弃用的控制序列重新定义为当前推荐的控制序列吗?

我理解,\bf\it在当前版本的 LaTeX 中都已弃用。据我所知,替代它们的正确控制序列是\bfseries\itshape

有什么理由不使用\let重新定义\bf\bfseries\it例如\itshape

\let\bf\bfseries

\let\it\itshape

这样,如果错误地使用了旧形式的控制序列,编译时它仍然是正确的?

答案1

有什么理由不使用 来\let重新定义\bf\bfseries\it\itshape

是的,有充分的理由。:-) 使用上述\let基于的设置,{\bf\it ...}生成加粗斜体相比之下,在纯 TeX 文档中{\bf\it ...}生成斜体文本。如果目标是在 LaTeX 和纯 TeX 中以相同的方式制作\bf和运行,则基于 - 的设置不是正确的方法。\it\let

LaTeX 内核未定义\bf\it、、、和。但是,标准 LaTeX 文档类 -- 、和-- 以及基于标准类的类确实定义了这些宏。例如,\rm具有以下指令:\sc\sf\sl\ttarticlereportbookarticle.cls

\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}

该宏\DeclareOldFontCommand有三个参数。它在 LaTeX“内核”中定义latex.ltx如下:

\def\DeclareOldFontCommand #1#2#3{\DeclareRobustCommand #1{\@fontswitch {#2}{#3}}}

如您所见,在将纯 TeX 字体切换宏“移植”到 LaTeX 时,我们非常小心。首先,文本模式和数学模式需要不同的命令。而且,说明\normalfont(在文本模式下)确保字体切换命令在 LaTeX 中的行为与在纯 TeX 中的行为相同。

顺便提一下,\@nomath定义如下:

\def\@nomath#1{\relax\ifmmode
   \@font@warning{Command \noexpand#1invalid in math mode}\fi}

因此,在数学模式下尝试使用\sl\sc会触发警告消息,提示这些命令在数学模式下无效。(当然,要在数学模式下生成以倾斜字母或小写字母呈现的单词,可以使用 和\textsl{...}\textsc{...}

附录\@fontswitch:为了完整起见,这里是(也来自latex.ltx)的定义:

\def \@fontswitch #1#2{%
  \ifmmode
     \let \math@bgroup \relax
     \def \math@egroup {\let \math@bgroup \@@math@bgroup
                        \let \math@egroup \@@math@egroup}%
     #2\relax
  \else
     #1%
  \fi
}

因此,如果在文本模式下遇到一个弃用的命令,则会选择适合文本模式的命令;相反,如果在数学模式下遇到该命令,则会在对一些数学分组命令进行微调后选择适合数学模式的命令。

答案2

命令\rm\bf被称为“弃用”,因为它们已从 latex 内核中删除。这些命令的工作方式不适合 latex2e 使用的(好得多的)“新字体选择方案”(nfss)。

尽管如此,许多类还是提供了这些命令的定义,但定义有所不同。例如

回忆录:\@memoldfonterr {\rm }{\textrm }{\rmfamily }

小馬:\scr@DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}

文章:\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}

因此,根据类别的不同,您会收到错误(回忆录,现在还有 KOMA),或大型警告(旧版本的 KOMA)或一些输出(文章)。

在命令有效的情况下,它们通常也适用于数学。在文本中,命令会切换到特殊字体,因为这是它们在 latex 2.09 中的工作方式。这意味着它\bf\it不会产生\bfseries\itshape粗体斜体字体,而是\it获胜并且您只会得到斜体。

您完全有权重新定义这些命令 - 例如摆脱 KOMA 警告。

相关内容