我目前正在向自己的类文件添加一项功能:根据我的文档中定义的主要语言自动翻译页脚。
\DeclareTranslationFallback{pageOfPages}
{\pagename~\thepage~of~\pageref{lastPage}}
\DeclareTranslation{English}{pageOfPages}
{\pagename~\thepage~of~\pageref{lastPage}}
\DeclareTranslation{Dutch}{pageOfPages}
{\dutchpagename~\thepage~op~\pageref{lastPage}}
\DeclareTranslation{French}{page-of-pages}
{\frenchpagename~\thepage~de~\pageref{lastPage}}
如您所见,翻译由翻译包处理,语言管理由 babel 处理。我使用的是 XeTeX,但我的课程旨在与渲染引擎无关。
我正在尝试获取 的翻译内容\pagename
。\pagename
包含用于表示页面的文本,默认情况下为“页面”。默认情况下使用英语。如果我们想要翻译版本,如果使用 babel,后者会在命令前加上语言名称,例如:\frenchpagename
法语(请参阅这里了解详情)。虽然法语确实如此,但无法通过\englishpagename
或 来验证这种情况\dutchpagename
。我检查了frenchb
babel 配置,找不到特定\frenchpagename
命令。后者似乎是在 babel 内部定义的,而不是在特定于语言的文件中定义的。
所以我的问题是,我该如何获得\pagename
荷兰语或其他语言的版本?我甚至尝试访问 babel 内部(makeatletter 等),但没有成功。
最小工作示例:
\documentclass{report}
\usepackage[french]{babel}
\usepackage{translations}
\DeclareTranslationFallback{pageOfPages}
{\frenchpagename~\thepage~of~\pageref{lastPage}}
\DeclareTranslation{English}{pageOfPages}
{\frenchpagename~\thepage~of~\pageref{lastPage}}
\DeclareTranslation{Dutch}{pageOfPages}
{\dutchpagename~\thepage~op~\pageref{lastPage}}
\DeclareTranslation{French}{page-of-pages}
{\frenchpagename~\thepage~de~\pageref{lastPage}}
\begin{document}
\GetTranslation{pageOfPages}
\label{lastPage}
\end{document}
例如将法语改为英语。
编辑:主要问题出现在我指定[base]
babel 选项时没有指定主要语言,LaTeX 会抱怨找不到语句\pagename
。我们的想法是先检查 babel 中是否定义了主要语言,否则我们需要定义它才能正确回退到英语。
感谢您的帮助。
答案1
这里的第一个问题是你使用了babel
选项[base]
。该选项只加载了 babel 的最小内容。甚至 babel 内部命令(例如)\bbl@loaded
都无法访问,并且你无法检查已加载哪种语言。最好的办法是,当你的类文件中未指定任何语言时,加载英语等后备语言。
第二个问题是命令没有以语言名称作为前缀。因此使用\pagename
应该可以工作。内容会根据当前加载的语言自动调整。
最后一点,如前所述,您需要确保您要加载的翻译实际上已与 babel 一起安装。默认情况下,Babel 并不附带其支持的所有语言。每种语言都有其专用的软件包名称:babel-french
法语、babel-dutch
荷兰语等。如果您没有安装完整的 LaTeX 发行版,并且安装的内容比较“最少”,则可以使用命令确保已安装语言插件tlmgr
(如果使用 TeXlive)。
更正后的代码:
\documentclass{report}
\usepackage[french]{babel}
\usepackage{translations}
\DeclareTranslationFallback{pageOfPages}
{\pagename~\thepage~of~\pageref{lastPage}}
\DeclareTranslation{English}{pageOfPages}
{\pagename~\thepage~of~\pageref{lastPage}}
\DeclareTranslation{Dutch}{pageOfPages}
{\pagename~\thepage~op~\pageref{lastPage}}
\DeclareTranslation{French}{page-of-pages}
{\pagename~\thepage~de~\pageref{lastPage}}
\begin{document}
\GetTranslation{pageOfPages}
\label{lastPage}
\end{document}
顺便说一下,真的一个\frenchpagename
命令,但我仍然不知道它来自哪里,因为它没有在中定义frenchb.dtx
。