Hyperref 使用多种语言选项中的错误

Hyperref 使用多种语言选项中的错误

我想用我找到的模板写我的硕士论文这里。一切都很顺利,直到我想编写和引用用 编写的算法algorithm2e

由于我必须为我的英文论文写一篇德文摘要,所以我在命令中声明了这一点documentclass,但这会导致hyperref通过生成的参考文献\autoref(以及算法本身)获得德文标签。

我将问题浓缩为以下 MWE。

这是实际的 tex 文档:

\documentclass[ngerman,english]{exampleStyle}

%\selectlanguage{english}
\usepackage[
  onelanguage % added for test purposes
  ]{algorithm2e}
%\renewcommand{\algorithmcfname}{Algorithm}

\begin{document}
%\selectlanguage{english}
\begin{algorithm}
  \LinesNumbered
  \SetKwInOut{Input}{Input}\SetKwInOut{Output}{Output}
  \Input{some input}
  \Output{some output}
  Just some random line\;\nllabel{algoLine:someLine}
  \While{condition}{action\;}
  \caption{Some Algorithm}
  \label{algo:someAlgo}
\end{algorithm}

%\selectlanguage{english}
Some reference to the algo: \autoref{algo:someAlgo}\\
Some reference to a line: \autoref{algoLine:someLine}

\end{document}

这里是引用的样式文件(exampleStyle.sty):

\ProvidesClass{exampleStyle}

\LoadClass{book}

\RequirePackage{babel}
\RequirePackage{hyperref}

所以问题是:如何让命令autoref使用英文标签而不是德文标签,同时仍保留参数ngerman?我希望有一种方法可以做到这一点,而无需重命名所有cfnames,因为我觉得这有点丑陋。

答案1

您的 exampleStyle.sty 应该是 exampleClass.cls。

除此之外:通过全局选项设置语言\documentclass相当麻烦,因为您无法控制接收列表的包如何处理语言,因此无法真正避免一个包看到应该忽略的语言。

如果algorithm2e您有额外的问题,那么包会使用\ProcessOptions而不是\ProcessOptions*来处理包选项,这意味着语言按照它们在包中声明的顺序进行处理,而不是按照您将它们传递给包的顺序进行处理。

因此最好避免使用选项列表\documentclass并仅将选项传递给 babel 包:

\PassOptionsToPackage{ngerman,english}{babel}
\documentclass[]{exampleStyle}

\usepackage{algorithm2e} %english is default


\begin{document}

\begin{algorithm}
  \LinesNumbered
  \SetKwInOut{Input}{Input}\SetKwInOut{Output}{Output}
  \Input{some input}
  \Output{some output}
  Just some random line\;\nllabel{algoLine:someLine}
  \While{condition}{action\;}
  \caption{Some Algorithm}
  \label{algo:someAlgo}
\end{algorithm}


Some reference to the algo: \autoref{algo:someAlgo}\\
Some reference to a line: \autoref{algoLine:someLine}

\end{document}

在此处输入图片描述

相关内容