使用 libertine OT1 字体时,Ångström 符号无法正确输出

使用 libertine OT1 字体时,Ångström 符号无法正确输出

我有这个文件:

\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在其他字体形状(尤其是斜体)中不起作用。如果您只将其用于埃单位(顺便说一句,您不应该这样做),那就很好了。

在此处输入图片描述

相关内容