LaTeX 中的 a/an 替换

LaTeX 中的 a/an 替换

我想知道是否存在可以在 LaTeX 中使用的条件命令(例如\ifthenelse),该命令允许我在一种情况下使用单词“a”,在另一种情况下使用单词“an”,这取决于以下单词是否以元音开头。

答案1

我同意 Caramdir 的观点,即检查元音不足以确定要使用哪个冠词。不过,如果您真的想这样做,这就是我在 ConTeXt 中执行的操作。

\def\placearticle#1%
  {\doifinsetelse{#1}{a,e,i,o,u}{an}{a} #1}

% Alternative definition, but a bit slower
% \def\placearticle#1%
%   {\doifinstringelse{#1}{aeiou}{an}{a} #1}

\starttext
\placearticle apple,
\placearticle orange,
\placearticle banana,
\placearticle strawberry
\stoptext

我不知道哪个 LaTeX 包提供了类似于\doifinsetelse或的功能\doifinstringelse

答案2

为了在纯 TeX 中执行此操作(在 LaTeX 中也可以),我会说类似这样的话:

\newtoks\vowellist % make a new empty token register named vowellist
\vowellist{\\a\\e\\i\\o\\u} % put vowels in it delimited by \\
                            % Redefining \\ will allow us to map over the list.
\def\placearticle#1{
   \edef\tempa{#1}                % In case #1 is a command, fully expand it.
   \def\tempb#1#2.${\let\tempc#1} % make \tempc the first symbol of tempa
   \expandafter\tempb\tempa.$     %
   \def\\##1{\ifx\tempc##1 n\fi}  % Check if the current vowel is the same as the letter in \tempc
   a\the\vowellist\\
        % Map \\ over \vowellist 
   \tempa                      % Insert #1; use tempa to make sure #1 isn't evaluated twice.
}

这应该适用于任何合理的输入,但我还没有

相关内容