当文档的语言是希伯来语时,如何让 cleveref 引用在多个引用之间使用语言敏感的连接词?

当文档的语言是希伯来语时,如何让 cleveref 引用在多个引用之间使用语言敏感的连接词?

以下问题基于这个答案


以下 LaTeX 文档保存在路径为 的文件中~/test.tex

\documentclass{article}

\usepackage{amsthm}
\newtheorem{theorem}{Theorem}

\usepackage{polyglossia}
\setmainlanguage{hebrew}
\setmainfont{Arial}

\usepackage[english]{cleveref}
\appto{\captionshebrew}{%
   \crefname{theorem}{thm}{thms}%
}

\begin{document}

\begin{theorem}\label{t1}
This is the first theorem.
\end{theorem}

\begin{theorem}\label{t2}
This is the second theorem.
\end{theorem}

Here are references to~\cref{t1,t2}.

\end{document}

当在终端执行以下命令时:

> cd ~
> xelatex 测试
> xelatex 测试

在路径 处生成一个 PDF 文件~/test.pdf。在 PDF 查看器中打开时,文件显示如下:

[![引用多个标签][1]][1]

(请注意,希伯来语是一种从右到左的语言。)

and这两个定理之间的单词是 ,是自动插入的cleverer。但是,这个连接词是一个英语单词,因此不是当前上下文中的正确单词;它应该是希伯来语对应词וגם

如何修复此问题?

答案1

如果你仔细查看cleveref代码,就会发现语言支持由两部分组成:首先定义一个语言选项,然后是\cref@addlanguagedefs重复所有内容的命令。第二部分用于多语言文档。

但是\cref@addlanguagedefs如果您使用,目前它会被破坏polyglossia:要测试某种语言是否已加载,它会使用polyglossia不再存在的内部命令,因此要使用它,您必须为每种语言提供缺少的命令:

将 newtheorem 声明也移到 cleveref 后面。

\documentclass{article}
\usepackage{amsthm}

\usepackage{polyglossia}
\setmainlanguage{hebrew}
\setotherlanguage{english}
\setmainfont{Arial}

\usepackage[english]{cleveref}

\newtheorem{definition}{Definition}
\newtheorem{theorem}{Theorem}
\newtheorem{claim}{Claim}

\makeatletter
%work around cleveref bug:
\providecommand\hebrew@loaded{}
\providecommand\english@loaded{}

\cref@addlanguagedefs{hebrew}
 {%
  \renewcommand{\crefrangeconjunction}{ AA }%
  \renewcommand\crefrangepreconjunction{ BB }%
  \renewcommand\crefrangepostconjunction{ CC }%
  \renewcommand{\crefpairconjunction}{ DD }%
  \renewcommand{\crefmiddleconjunction}{ EE }%
  \renewcommand{\creflastconjunction}{ FF }%
  \renewcommand{\crefpairgroupconjunction}{ GG }%
  \renewcommand{\crefmiddlegroupconjunction}{ HH }%
  \renewcommand{\creflastgroupconjunction}{ II }%
  \crefname{definition}{DEFINITION}{DEFINITIONS}%
  \crefname{theorem}{THEOREM}{THEOREMS}%
  \crefname{claim}{CLAIM}{CLAIMS}%
 }
\makeatother
\begin{document}

\begin{definition}\label{d1}
This is a definition.
\end{definition}

\begin{definition}\label{d2}
This is another definition.
\end{definition}

\begin{definition}\label{d3}
This is yet another definition.
\end{definition}

\begin{theorem}\label{t}
This is a theorem.
\end{theorem}

\begin{claim}\label{c}
This is a theorem.
\end{claim}

Here is a reference to~\cref{d1,d2,d3,t,c} based upon~\cref{d1,d2,t}.

\selectlanguage{english}
Here is a reference to~\cref{d1,d2,d3,t,c} based upon~\cref{d1,d2,t}.


\end{document}

在此处输入图片描述

答案2

\documentclass{article}
\usepackage{amsthm}

\newtheorem{definition}{Definition}
\newtheorem{theorem}{Theorem}
\newtheorem{claim}{Claim}

\usepackage{polyglossia}
\setmainlanguage{hebrew}
\setmainfont{Arial}

\usepackage[english]{cleveref}

\newcommand{\crefrangeconjunction}{ AA }
\newcommand\crefrangepreconjunction{ BB }
\newcommand\crefrangepostconjunction{ CC }
\newcommand{\crefpairconjunction}{ DD }
\newcommand{\crefmiddleconjunction}{ EE }
\newcommand{\creflastconjunction}{ FF }
\newcommand{\crefpairgroupconjunction}{ GG }
\newcommand{\crefmiddlegroupconjunction}{ HH }
\newcommand{\creflastgroupconjunction}{ II }

\crefname{definition}{DEFINITION}{DEFINITIONS}
\crefname{theorem}{THEOREM}{THEOREMS}
\crefname{claim}{CLAIM}{CLAIMS}

\begin{document}

\begin{definition}\label{d1}
This is a definition.
\end{definition}

\begin{definition}\label{d2}
This is another definition.
\end{definition}

\begin{definition}\label{d3}
This is yet another definition.
\end{definition}

\begin{theorem}\label{t}
This is a theorem.
\end{theorem}

\begin{claim}\label{c}
This is a theorem.
\end{claim}

Here is a reference to~\cref{d1,d2,d3,t,c} based upon~\cref{d1,d2,t}.

\end{document}

Cleveref 锻炼

笔记

  1. 我不知道这些命令\crefmiddleconjunction\creflastconjunction功能是什么,如果有人告诉我我将不胜感激,这样我就可以修改上述代码并使其完整。

  2. 上述解决方案仅适用于主要语言(基本上唯一的语言)为希伯来语的单语文档。我不知道如何针对某些部分以希伯来语为主要语言,而其他部分以英语为主要语言的双语文档进行修改。

相关内容