![通过类选项在 Babel 中调用语言](https://linux22.com/image/412930/%E9%80%9A%E8%BF%87%E7%B1%BB%E9%80%89%E9%A1%B9%E5%9C%A8%20Babel%20%E4%B8%AD%E8%B0%83%E7%94%A8%E8%AF%AD%E8%A8%80.png)
我正在编写一个应该是双语的论文课程,并且语言应该由用户输入 - 一种是主要语言,另一种是次要语言。
由于文档结构的原因,文档的某些部分以主要语言编写,而其他部分则以次要语言编写。例如,每种语言都有一份摘要。
我的困难在于将语言作为选项传递。我试过了,\PassOptionsToPackage
但似乎不起作用,所以我用 if 语句绕过了这个问题,如下所示:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{bilang-thesis}
\newif\if@portuguese
\newif\if@english
\DeclareOption{portuguese}{\@portuguesetrue\@englishfalse}
\DeclareOption{english}{\@portuguesefalse\@englishtrue}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions\relax
\LoadClass[12pt]{book}
\if@portuguese
\RequirePackage[english,main=portuguese]{babel}
\else
\RequirePackage[portuguese,main=english]{babel}
\fi
论文的结构由类定义。这意味着文本块会针对预期的部分自动生成,标签(如部分名称)会通过命令根据指定的语言进行添加\addto\captions
。在下面的代码中,我定义了两个命令,一个用于构造摘要,另一个用于打印摘要。
\newcommand*\shortabstract[2]{%
\chapter*{\abstractname}%
\label{cha:\abstractname}%
\addcontentsline{toc}{chapter}{\nameref{cha:\abstractname}}%
#1%
\vspace{\baselineskip}%
\noindent\textbf{\keywordscaption: } #2%
}
\newcommand*\makeabstract{%
\clearpage%
\if@portuguese
\begin{otherlanguage}{portuguese}
\shortabstract{\@abstract}{\@keywords}
\end{otherlanguage}
\cleardoublepage
\begin{otherlanguage}{english}
\shortabstract{\@altabstract}{\@altkeywords}
\end{otherlanguage}
\cleardoublepage
\else
\begin{otherlanguage}{english}
\shortabstract{\@abstract}{\@keywords}
\end{otherlanguage}
\cleardoublepage
\begin{otherlanguage}{portuguese}
\shortabstract{\@altabstract}{\@altkeywords}
\end{otherlanguage}
\cleardoublepage
\fi
}
第一个命令只是为了简化第二个命令,因为我无法将语言作为键或定义来调用,例如\@firstlang
,并且必须使用 if 来调用不同的\begin{otherlanguage}
环境。当我尝试时,babel 会抛出一个错误,提示语言未定义。
所以我想要了解的是在这些 babel 环境中如何将语言作为命令传递,比如第一个语言、第二个语言。
最终希望将语言作为选项来解决,并定义多语言命令,类似于\addto\captions
但用于更大的文本块。
谢谢
编辑:
我使用\def\@firstlang{firstlang}
来定义语言命令,但正如 Ulrike Fischer 所建议的那样,可以简单地定义\newcommand\firstlang {english}
。在回答了第一个问题后,我将主题改为主要问题。
如何将语言作为选项从课堂上传递,尽管语言是未知的。
平均能量损失
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{bilang-thesis}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{%
family=BL,
prefix=BL@,
}
\DeclareStringOption[firstlang,secondlang]{languages}
\ProcessKeyvalOptions*
\PassOptionsToPackage{\BL@languages}{babel}
\RequirePackage{babel}
我相信这是有效的,但如何选择语言呢?