根据所指定理的类型,在交叉引用中添加不同的西班牙语定冠词

根据所指定理的类型,在交叉引用中添加不同的西班牙语定冠词

我正在使用该包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 nrefla Proposición nref

\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 宏的结果进行字符串比较的人来说,这是一个常见问题。

相关内容