这可能是一个相当简单的问题,但我找不到答案:当我写例如
\pageref{Example}
输出是on page 12
针对 babel 语言的英语,但auf Seite 12
针对 babel 语言的是德语。
我想创建这样的自定义语言集:
\createTranslation{insertTableTitle}
{english=Something, german=Etwas, italiano=Alcuno, default=Something}
当我调用它时,\insertTableTitle
它会根据语言扩展为不同的字符串。当然,这个例子是伪代码,但我很确定,babel 中有一些内置命令可以完成这项工作。
执行此操作的默认方法是什么或如何处理目录标题等?
答案1
简短的回答是你写一个条件:-) 如何实现条件,有多种选择。
例如,该varioref
软件包使用软件包选项(babel
完全避免)。请看(复制自varioref.sty
):
\DeclareOption{american}
{\vref@addto\extrasamerican{%
\def\reftextfaceafter {on the \reftextvario{facing}{next} page}%
\def\reftextfacebefore{on the \reftextvario{facing}{preceding}
page}%
\def\reftextafter {on the \reftextvario{following}{next} page}%
\def\reftextbefore {on the \reftextvario{preceding}{previous} page}%
\def\reftextcurrent {on \reftextvario{this}{the current} page}%
\def\reftextfaraway#1{on page~\pageref{#1}}%
\def\reftextpagerange#1#2{on pages~\pageref{#1}--\pageref{#2}}%
\def\reftextlabelrange#1#2{\ref{#1} to~\ref{#2}}%
\let\vrefformat\vrefdefaultformat
\let\Vrefformat\Vrefdefaultformat
\let\fullrefformat\fullrefdefaultformat
\let\vrefrangeformat\vrefrangedefaultformat
}}
\DeclareOption{arabic}
{\vref@addto\extrasarabic{%
\def\reftextfaceafter {بالصفحة \reftextvario{المقابلة}{اللاحقة}}%
\def\reftextfacebefore{بالصفحة \reftextvario{المقابلة}{المُنْصَرِمَةٌ}}%
\def\reftextafter {بالصفحة \reftextvario{اللاحقة}{التالية}}%
\def\reftextbefore {بالصفحة \reftextvario{السابقة}{المُنْصَرِمَةٌ}}%
\def\reftextcurrent {ب\reftextvario{الصفحة الحالية}{هذه الصفحة}}%
\def\reftextfaraway#1{بالصفحة رقم~\pageref{#1}}%
\def\reftextpagerange#1#2{بالصفحات~\pageref{#1}--\pageref{#2}}%
\def\reftextlabelrange#1#2{\ref{#1} حتى~\ref{#2}}%
\let\vrefformat\vrefdefaultformat
\let\Vrefformat\Vrefdefaultformat
\let\fullrefformat\fullrefdefaultformat
\let\vrefrangeformat\vrefrangedefaultformat
}}
\DeclareOption{austrian}
{\vref@addto\extrasaustrian{%
\def\reftextfaceafter {auf der n\"achsten Seite}%
\def\reftextfacebefore{auf der vorherigen Seite}%
\let\reftextafter \reftextfaceafter
\let\reftextbefore \reftextfacebefore
\def\reftextcurrent {auf dieser Seite}%
\def\reftextfaraway#1{auf Seite~\pageref{#1}}%
\def\reftextpagerange#1#2{auf Seiten~\pageref{#1}--\pageref{#2}}%
\def\reftextlabelrange#1#2{\ref{#1} bis~\ref{#2}}%
\let\vrefrangeformat\vrefrangedefaultformat
}}
如果你想要一个babel
基于的解决方案,你可以使用条件
\iflanguage{<language>}{<true action>}{<false action>}
所以就像
\newcommand\mytabletitle{%
\iflanguage{english}{Something}{%
\iflanguage{german}{Etwas}{%
\iflanguage{italiano}{Alcuno}{%
Something %default
}}}}
并打印您的命令\mytabletitle
而不是任何硬编码的字符串。
这个问题的答案给出了使用基于 babel 的条件的其他一些方法。具体来说,egreg 提供了一个改进的版本,它使用了您在原始问题中要求的键值语法。我不会窃取他的答案,而是向您指出它。
答案2
你可以使用这个translator
包。例如,Beamer 就是用这个包来翻译“Figure”之类的字符串的。
您会发现它的词典中已经包含许多常用术语的翻译,但您也可以添加新的术语:
\documentclass[
ngerman
%english
]{article}
\usepackage{babel}
\usepackage{translator}
\usedictionary{translator-basic-dictionary}
\newtranslation[to = German]{Something}{Etwas}
\newtranslation[to = Italian]{Something}{Alcuno}
\begin{document}
\translate{table}
\translate{Something}
\end{document}