为什么 \AA 仍然按照 LaTeX2.09 中的定义进行定义?

为什么 \AA 仍然按照 LaTeX2.09 中的定义进行定义?

\AA和宏\aa定义latex.ltx

\def \aa {\r a}
\def \AA {\r A}

X2由于编码中没有拉丁字母,因此此方法失败。为什么 LaTeX 团队不恢复到以下定义:

\DeclareTextSymbolDefault{\AA}{OT1}
\DeclareTextSymbolDefault{\aa}{OT1}
\DeclareTextCommand{\aa}{OT1}{\r a}
\DeclareTextCommand{\AA}{OT1}{\r A}

以下是 MWE(已更新):

\documentclass{article}
\usepackage[utf8]{inputenc} % source file encoding
\usepackage[X2,T2A]{fontenc} % cyrillic font encoding
%  \DeclareTextSymbolDefault{\AA}{OT1}
%  \DeclareTextSymbolDefault{\aa}{OT1}
%  \DeclareTextCommand{\aa}{OT1}{\r a}
%  \DeclareTextCommand{\AA}{OT1}{\r A}

\begin{document}%

\verb|\AA|=\AA
\verb|\aa|=\aa

\fontencoding{X2}\selectfont

\verb|\AA|=\AA
\verb|\aa|=\aa

\end{document}

答案1

在 LaTeX 2.09 中,定义如下

\def\aa{\accent23a}

\def\AA{\leavevmode\setbox0\hbox{h}\dimen@\ht0\advance\dimen@-1ex%
  \rlap{\raise.67\dimen@\hbox{\char'27}}A}

因为没有编码支持,也没有\r定义重音。

因此无论其他情况如何\aa\AA均未像在 LaTeX 2.09 中那样定义。

使用当前的乳胶和您的 MWE 表明您的案例中的有效定义是

> \AA=macro:
->\OT1-cmd \AA \OT1\AA .

你在 X1 中得到了重音 A:

\documentclass{article}
\usepackage[utf8]{inputenc} % source file encoding
\usepackage[X2,T2A]{fontenc} % cyrillic font encoding
\usepackage[english,russian]{babel}
%  \DeclareTextSymbolDefault{\AA}{OT1}
%  \DeclareTextSymbolDefault{\aa}{OT1}
%  \DeclareTextCommand{\aa}{OT1}{\r a}
%  \DeclareTextCommand{\AA}{OT1}{\r A}


\begin{document}%

\verb|\cyrillicencoding|=\cyrillicencoding

Русский English

\meaning\AA

\verb|\AA|=\AA
\verb|\aa|=\aa

\section{X2}

\fontencoding{X2}\selectfont
\verb|\cyrillicencoding|=\cyrillicencoding

Русский English

\show\AA

\verb|\AA|=\AA (A \r A)
\verb|\aa|=\aa (a \r a)

\show\AA
\end{document}

在此处输入图片描述


建议的定义需要扩展至全部编码。

正如所发布的(以及目前在俄语 babel 中),它们会破坏\AA(例如)T1 编码,这很糟糕,因为它是用于这种语言的斯堪的纳维亚语言的主要编码。

\documentclass{article}

\usepackage[X2,T1]{fontenc} % cyrillic font encoding

\showoutput

\setbox0\hbox{foob\aa r}\showbox0

  \DeclareTextSymbolDefault{\AA}{OT1}
  \DeclareTextSymbolDefault{\aa}{OT1}
  \DeclareTextCommand{\aa}{OT1}{\r a}
  \DeclareTextCommand{\AA}{OT1}{\r A}

\setbox0\hbox{foob\aa r}\showbox0

\begin{document}%





\end{document}

显示\aaT1 中的默认字符来自 T1 编码字体,这样连字和字距调整才能正常工作

\hbox(6.8872+0.0)x27.79877
.\T1/cmr/m/n/10 f
.\T1/cmr/m/n/10 o
.\kern0.27771
.\T1/cmr/m/n/10 o
.\T1/cmr/m/n/10 b
.\T1/cmr/m/n/10 �
.\T1/cmr/m/n/10 r

但建议的定义\aa来自 OT1 字体

> \box0=
\hbox(6.94444+0.0)x27.8
.\T1/cmr/m/n/10 f
.\T1/cmr/m/n/10 o
.\kern0.27771
.\T1/cmr/m/n/10 o
.\T1/cmr/m/n/10 b
.\kern -1.25 (for accent)
.\OT1/cmr/m/n/10 ^^W
.\kern -6.25002 (for accent)
.\OT1/cmr/m/n/10 a
.\T1/cmr/m/n/10 r

因此,任何使用 å 的单词的连字符都会被破坏。

答案2

如果你看一下russianb.ldf,你就会发现

 86 \expandafter\ifx\csname T@X2\endcsname\relax\else
 87   \DeclareTextSymbolDefault{\AA}{OT1}
 88   \DeclareTextSymbolDefault{\aa}{OT1}
 89   \DeclareTextCommand{\aa}{OT1}{\r a}
 90   \DeclareTextCommand{\AA}{OT1}{\r A}
 91 \fi

(添加了行号以供参考),这意味着,只要X2字体编码已在文档中初始化,\AA\aa命令就会按照您的建议执行。否则就没有必要这样做,因为名称以 开头的编码T应该在相应的 ASCII 位置有拉丁字母。

相关内容