![使用 libertine OT1 字体时,Ångström 符号无法正确输出](https://linux22.com/image/321904/%E4%BD%BF%E7%94%A8%20libertine%20OT1%20%E5%AD%97%E4%BD%93%E6%97%B6%EF%BC%8C%C3%85ngstr%C3%B6m%20%E7%AC%A6%E5%8F%B7%E6%97%A0%E6%B3%95%E6%AD%A3%E7%A1%AE%E8%BE%93%E5%87%BA.png)
我有这个文件:
\documentclass{article}
\usepackage[OT1]{fontenc}
\usepackage{libertine}
%\UndeclareTextCommand{\l}{OT1}
%\DeclareTextSymbolDefault{\l}{T1}
%\UndeclareTextCommand{\AA}{OT1}
%\DeclareTextSymbolDefault{\AA}{T1}
%\let\oldAA\AA
%\renewcommand{\AA}{\begingroup\fontencoding{T1}\selectfont\oldAA\endgroup}
\usepackage{amsmath}
\usepackage{siunitx}
%\DeclareSIUnit{\angstrom}{\AA}
\begin{document}
This is Quantifiably Efficiently Ligatured Text.
\AA
\si{\angstrom}
\l
\capitalring{A}
\end{document}
如你所见,这个ł
字符印错了。我把它整理出来了这个问题,这是前两行注释行,从 T1 编码中获取该特定符号。我Å
在使用该siunitx
包时遇到了类似的符号问题。这将检查默认编码并选择\AA
或\capitalring{A}
:
\str_if_eq:VnT \encodingdefault { OT1 }
{
\__siunitx_option_unchanged:Nnn \l__siunitx_angstrom_math_tl
{ \text { \AA } }
{ \text { \capitalring { A } } }
\__siunitx_option_unchanged:Nnn \l__siunitx_angstrom_text_tl
{ \AA }
{ \capitalring { A } }
}
因此,上面的 MWE 检查了这些命令。问题是,我无法通过 siunitx 正确显示符号。第二对注释行遵循了我从该ł
问题中获得的修复。但这只会冻结 LaTeX 编译器。第三对注释行修复了该\AA
命令,但我似乎无法使用siunitx
它(最后一行注释)。
有没有办法让siunitx
包使用 T1 编码\AA
(这正是我需要的)?请注意,我需要对第一个句子中显示的OT1
酷连字(尤其是Qu
)进行编码,如果我不使用 OT1,它们就会消失。
答案1
该命令\AA
不是编码特定的,这是错误的原因:它的定义是\r{A}
。不幸的是,OT1 编码中的环形重音宏与 Libertine 字体配合不好,因此您可以采用特别指定定义:
\documentclass{article}
\usepackage[T1,OT1]{fontenc}
\usepackage{libertine}
\usepackage{amsmath}
\usepackage{siunitx}
\DeclareSIUnit{\angstrom}{\mbox{\normalfont\AA}}
\UndeclareTextCommand{\l}{OT1}
\DeclareTextSymbolDefault{\l}{T1}
\makeatletter
\DeclareRobustCommand{\AA}{%
\leavevmode
\vbox{\ialign{##\cr
\hidewidth\char'27 \hidewidth\cr
\noalign{\nointerlineskip\kern-1.4ex}
A\cr
}}%
}
\makeatother
\begin{document}
This is Quantifiably Efficiently Ligatured Text.
\si{\angstrom}
\l
\end{document}
恐怕这\AA
在其他字体形状(尤其是斜体)中不起作用。如果您只将其用于埃单位(顺便说一句,您不应该这样做),那就很好了。