在 Babel 中批量加载语言

在 Babel 中批量加载语言

假设我们已经在宏中存储了一些语言名称,例如,,\csname lang1\endcsname{language_name_1}...,,\csname lang<N>\endcsname{language_name_<N>}其中<N>是某个已知的较小值。

有没有办法在纯 TeX 中babel一次性将所有这些语言名称加载到包中?请注意,我无法通过写入直接加载这些语言,\usepackage[{language_name_1},...,{language_name_<N>}]{babel}因为这些名称将由用户选择/定义。

我尝试了以下方法(以 N=3 为例),但没有成功......

\documentclass{article}

\expandafter\def\csname lang1\endcsname{english}
\expandafter\def\csname lang2\endcsname{german}
\expandafter\def\csname lang3\endcsname{polish}

\newcount\tmp
\tmp=1
\def\languages{%
  \loop\ifnum 3<\tmp
  \else
    \csname lang\the\tmp\endcsname
    \ifnum\tmp=3\relax\else,\fi
    \advance\tmp by 1\relax
  \repeat}

\usepackage[%
  \csname lang1\endcsname,
  \csname lang2\endcsname,
  \csname lang3\endcsname]{babel}

% \usepackage[\languages]{babel}   % This is what I want.

\begin{document}
Lorem ipsum...
\end{document}

答案1

怎么样

\documentclass{article}

\expandafter\def\csname lang1\endcsname{english}
\expandafter\def\csname lang2\endcsname{german}
\expandafter\def\csname lang3\endcsname{polish}

\newcount\tmp
\def\makelanguages#1{%
\edef\languages{\csname lang1\endcsname}%
\tmp=2%
\loop\ifnum \tmp<\the\numexpr#1+1\relax
   \edef\languages{\languages,\csname lang\the\tmp\endcsname} 
    \advance\tmp by 1\relax
  \repeat}
\makelanguages3 

\usepackage[\languages]{babel}   % This is what I want.

\begin{document}
I have loaded \languages.
\end{document}

相关内容