具有多语言和 RTL 的大写目录

具有多语言和 RTL 的大写目录

我正在尝试将章节标题排版为大写,例如这个答案。我不想在命令中执行此操作\chapter{},因为我使用 hyperref 包来引用整个文档中的标题,并且不希望它们在这些情况下大写。出于某种原因,上述答案不适用于多语种和 RTL 语言。我已在此处编辑 MWE 以显示这一点(注意:我将其从章节更改为章节和报告类):

\documentclass{report}
\usepackage{textcase}
\usepackage{tocloft}
\usepackage{hyperref}
\usepackage{polyglossia}
\setotherlanguage{hebrew}

\makeatletter
\let\oldcontentsline\contentsline
\def\contentsline#1#2{%
  \expandafter\ifx\csname l@#1\endcsname\l@chapter
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi 
  {%  
    \oldcontentsline{#1}{\MakeTextUppercase{#2}}%
  }{% 
    \oldcontentsline{#1}{#2}%
  }%  
}
\makeatother

\begin{document}
\tableofcontents
\chapter{A test section $a=b$}\label{sec:test}
\chapter{Another test section with a reference:~\ref{sec:test}}
\section{Third}
\end{document}

如果你注释掉它,\setotherlanguage{hebrew}它就可以正常工作。所以它不仅仅是多语种,而且是 RTL 语言(我尝试了希伯来语和叙利亚语)。

我并不局限于上述解决方案,因此如果有人知道使用 RTL 语言实现此目的的其他方法,我愿意洗耳恭听。

答案1

将重新定义延迟至 \begin{document}。

我不知道并且没有测试过希伯来语和 \MakeTextUppercase 是否一致,如果您有希伯来语章节标题,则必须自己检查:

\documentclass{report}
\usepackage{textcase}
\usepackage{tocloft}
\usepackage{hyperref}
\usepackage{polyglossia}
\setotherlanguage{hebrew}

\makeatletter
\AtBeginDocument{%
\let\oldcontentsline\contentsline
\def\contentsline#1#2{%
  \expandafter\ifx\csname l@#1\endcsname\l@chapter
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {%
    \oldcontentsline{#1}{\MakeTextUppercase{#2}}%
  }{%
    \oldcontentsline{#1}{#2}%
  }%
}}
\makeatother

\begin{document}
\tableofcontents
\chapter{A test section $a=b$}\label{sec:test}
\chapter{Another test section with a reference:~\ref{sec:test}}
\section{Third}
\end{document}

相关内容