我正在使用该包cleveref
通过宏自动打印引用的“定理”类型的名称\Cref
。由于我用西班牙语写作,引用定理的最自然方式是在引用前添加定冠词(也就是说,我想引用“这定理 1.1”,而不是仅仅“定理 1.1”)。问题在于,在西班牙语中,定冠词的形式取决于它所修饰的词的语法性别。
假设我有这样的事情:
\documentclass{article}
\usepackage[spanish]{babel}
\usepackage{ifthen}
\usepackage{amsthm}
\usepackage{cleveref}
\theoremstyle{definition}
\newtheorem{teo}{Teorema}
\newtheorem{prop}{Proposición}
\begin{document}
\begin{teo} \label{first}
A theorem
\end{teo}
\begin{prop} \label{second}
A proposition
\end{prop}
El \Cref{first}, el \Cref{second}.
\end{document}
输出如下所示:
Teorema 1. A theorem
Proposición 1. A proposition
El Teorema 1, el Proposición 1.
“teorema” 表示“定理”,“proposición” 表示“命题”,而“el” 表示“这个”。但是,由于“proposición”是阴性名词,因此它使用阴性冠词“la”而不是“el”。所以最后一行应该是El Teorema 1, la Proposición 1
。我想要一种自动执行此操作的方法,这样如果指向定理,则\somemacro{ref}
打印,如果指向命题,则打印。我尝试将以下内容添加到序言中:el Teorema n
ref
la Proposición n
ref
\newcommand{\ElCref}[1]{% capitalized
\ifthenelse{%
\equal{\nameCref{#1}}{Proposición}%
}{%
La \Cref{#1}%
}{%
El \Cref{#1}%
}%
}
\newcommand{\elCref}[1]{% non-capitalized
\ifthenelse{%
\equal{\nameCref{#1}}{Proposición}%
}{%
la \Cref{#1}%
}{%
el \Cref{#1}%
}%
}
然后\ElCref{first}, \elCref{second}.
在文档中。但是,这会产生与之前相同的输出。更具体地说,它看起来总是\ifthenelse{\equal{\nameCref{ref}}{Name}}{1}{0}
计算为0
,尽管\nameCref
似乎工作正常。我认为这可能与 TeX 如何进行字符串比较有关,但我不知道如何修复它。
答案1
使用\crefformat
(小写版本)和\Crefformat
添加正确的冠词。
\documentclass{article}
\usepackage[spanish]{babel}
\usepackage{amsthm}
\usepackage{cleveref}
\newtheorem{teo}{Teorema}
\newtheorem{prop}{Proposición}
\Crefformat{teo}{El #2teorema~#1#3}
\crefformat{teo}{el #2teorema~#1#3}
\Crefformat{prop}{La #2proposición~#1#3}
\Crefformat{prop}{la #2proposición~#1#3}
\begin{document}
\begin{teo} \label{first}
A theorem
\end{teo}
\begin{prop} \label{second}
A proposition
\end{prop}
\Cref{first}, \cref{second}.
\end{document}
答案2
最好的办法是使用\crefformat
命令。例如,
\crefformat{teo}{el teorema}
\Crefformat{teo}{El teorema}
以及参考资料的基础\cref
/命令。\Cref
至于为什么你的尝试不起作用,那是因为命令\nameCref
没有在顶层扩展为预期的字符串,而是扩展为最终给出字符串的一系列命令。对于尝试对 LaTeX 宏的结果进行字符串比较的人来说,这是一个常见问题。