我想知道是否存在可以在 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.
}
这应该适用于任何合理的输入,但我还没有