假设我们已经在宏中存储了一些语言名称,例如,,\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}