![当文档的语言是希伯来语时,如何让 cleveref 引用在多个引用之间使用语言敏感的连接词?](https://linux22.com/image/457361/%E5%BD%93%E6%96%87%E6%A1%A3%E7%9A%84%E8%AF%AD%E8%A8%80%E6%98%AF%E5%B8%8C%E4%BC%AF%E6%9D%A5%E8%AF%AD%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E8%AE%A9%20cleveref%20%E5%BC%95%E7%94%A8%E5%9C%A8%E5%A4%9A%E4%B8%AA%E5%BC%95%E7%94%A8%E4%B9%8B%E9%97%B4%E4%BD%BF%E7%94%A8%E8%AF%AD%E8%A8%80%E6%95%8F%E6%84%9F%E7%9A%84%E8%BF%9E%E6%8E%A5%E8%AF%8D%EF%BC%9F.png)
以下问题基于这个答案。
以下 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}
笔记
我不知道这些命令
\crefmiddleconjunction
和\creflastconjunction
功能是什么,如果有人告诉我我将不胜感激,这样我就可以修改上述代码并使其完整。上述解决方案仅适用于主要语言(基本上唯一的语言)为希伯来语的单语文档。我不知道如何针对某些部分以希伯来语为主要语言,而其他部分以英语为主要语言的双语文档进行修改。