\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}
显示\aa
T1 中的默认字符来自 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 位置有拉丁字母。