我想用我找到的模板写我的硕士论文这里。一切都很顺利,直到我想编写和引用用 编写的算法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
?我希望有一种方法可以做到这一点,而无需重命名所有cfname
s,因为我觉得这有点丑陋。
答案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}