我理解,\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
\tt
article
report
book
article.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 警告。