使用 cleveref 按原样引用其名称的定理(寻找在 ProjLib 中实现“originalref”模式的新方法)

使用 cleveref 按原样引用其名称的定理(寻找在 ProjLib 中实现“originalref”模式的新方法)

在撰写多语言文档时,如果某个定理标题在不同语言中对应有不同的名称,则有两种方式可以引用它们:

  1. 使用其原本出现的名称。例如,如果一个定理在英文环境中被命名为“Theorem”,那么后来即使在法文环境中引用它,它仍然被称为“Theorem”。

  2. 使用当前上下文对应的名称。例如,如果一个定理在英文上下文中写成“Theorem”,而之后在法文上下文中引用时,它就被称为“Théorème”。

在我的包中ProjLib,第一种命名方式叫originalref,第二种叫 ,regionalref它们的实现方式大致如下:

  1. originalref:为不同的语言定义单独的环境,例如theoremenglish,,theoremfrench每个都有其\crefname配置,并定义主环境以选择与上下文相对应的适当的环境。

  2. regionalref:仅定义单个环境theorem,并定义它的\crefnamebe\csname theoremname\languagename\endcsname和它的复数,这些名称\theoremnameenglish\theoremnamefrench语言配置文件中设置。

该模式虽然regionalref运行良好,但是originalref定义了太多环境并设置\crefname了太多次,因此速度相当慢。

当我用 重写这个包时expl3,我想借此机会找到一种新的实现方式。例如,是否有某种方法可以\languagename在设置标签时记录 的值,并将其反映在引用文本中?(这只是一个粗略的想法,我从来没有弄清楚它实际上如何工作)

你有什么想法吗?提前感谢你的任何建议〜


你可以通过这个演示文档来查看这两种模式的效果(并且感受一下这种originalref模式有多慢 ;) ):

%! TEX program = xelatex
\documentclass[regionalref]{einfart}
% \documentclass[originalref]{einfart}

\usepackage{ProjLib}

\begin{document}

\UseLanguage{English}

Current language: \languagename

\begin{theorem}\label{thm1}
    In English.
\end{theorem}

\cref{thm1,thm2}


\vspace{2cm}
\UseLanguage{French}

Current language: \languagename

\begin{theorem}\label{thm2}
    In French.
\end{theorem}

\cref{thm1,thm2}

\end{document}

regionalref

在此处输入图片描述

originalref

在此处输入图片描述

答案1

我不确定你到底想如何与 cleveref 交互,但我认为你正在寻找类似的东西属性(自 2023/11/1 版本起可用)。您可以定义一个新属性,例如

\NewProperty{language}{now}{english}{\languagename}

并使用 与\RecordProperties{<label>}{<list of properties>}使用 相同的方式捕获属性\label,然后使用 引用属性\RefProperty{<label>}{<property>}。以下是使用上述定义的language属性的示例:

\documentclass[regionalref]{einfart}
% \documentclass[originalref]{einfart}

\usepackage{ProjLib}

\NewProperty{language}{now}{english}{\languagename}

\begin{document}

\UseLanguage{English}

Current language: \languagename

\begin{theorem}\RecordProperties{thm1}{label,language}
    In English.
\end{theorem}


\vspace{2cm}
\UseLanguage{French}

Current language: \languagename

\begin{theorem}\RecordProperties{thm2}{label,language}
    In French.
\end{theorem}

\RefProperty{thm1}{label}\par
\RefProperty{thm1}{language}\par
\RefProperty{thm2}{label}\par
\RefProperty{thm2}{language}\par
\end{document}

道具

相关内容