\eappto 和 \aa 无法在没有 fontenc 的情况下与 pdflatex 配合使用

\eappto 和 \aa 无法在没有 fontenc 的情况下与 pdflatex 配合使用

我正在尝试在命令\aa中使用\eappto。下面的最小代码在 XeLaTeX 和 LuaLaTeX 中运行良好,但在 pdfLaTeX 中会失败,除非我包含包fontenc。这让我很困惑,因为即使没有包,在命令\aa之外也能完美运行。\eapptofontenc

\documentclass{article}
% \usepackage[T1]{fontenc}
\usepackage{etoolbox}
\makeatletter
\newcommand{\zz}{%
  \def\@tmp{}%
  \eappto\@tmp{\aa}%
  \@tmp%
}
\makeatother
\begin{document}
  \aa tta% works just fine
  \zz% only works with `fontenc`
\end{document}

答案1

在 pdflatex 中,瑞典语应始终使用 T1 enoding,否则连字符会出错,而且通常不能应用于\edeflatex 构造。也就是说,utf-8 字符\protected在 中非常安全,\edef因此如果您确实需要它,只需使用å而不是\aa

\documentclass{article}
% \usepackage[T1]{fontenc}
\usepackage{etoolbox}
\makeatletter
\newcommand{\zz}{%
  \def\@tmp{}%
  \eappto\@tmp{å}%
  \@tmp%
}
\makeatother
\begin{document}
  \aa tta % works just fine
  \zz tta    % only works with `fontenc`
\end{document}

在此处输入图片描述

如果您有旧的乳胶,您可以使用标准乳胶,\protected@edef而不是依赖不受支持的 edef 使用。

\documentclass{article}
% \usepackage[T1]{fontenc}
\usepackage{etoolbox}
\makeatletter
\newcommand{\zz}{%
  \def\@tmp{}%
  \protected@edef\@tmp{\@tmp å}%
  \@tmp%
}
\makeatother
\begin{document}
  \aa tta % works just fine
  \zz tta    % only works with `fontenc`
\end{document}

答案2

的定义\aa

\r a

\rXeLaTeX 或 LuaLaTeX的定义是

\TU-cmd \r \TU\r

\TU\r我们可以看到(这是一个名称中带有反斜杠的奇怪命令)的定义是

#1->\@text@composite \TU\r #1\@empty \@text@composite {\add@unicode@accent {"030A}{#1}}.

\r a最终扩展为单个 Unicode 字符å

使用 pdflatex 中默认的 OT1 编码,该\r命令变成了一个复杂的构造,旨在在 上方添加环音符a,但它无法\edef在 的使用中存活下来\eappto

另一方面,T1 的情况与前一种情况类似,因为 T1 编码字体具有预制å字符。

\edef但是,在任何情况下我都不建议使用这种依赖编码的命令。

相关内容