我想要创建一个包含多种语言的 LaTeX 投影仪演示文稿,其含义如下:源代码应该包含不同的语言,但编译结果的语言应该取决于一种语言的特定选择。
已经提供了解决方案https://tex.stackexchange.com/a/31401/21166。然而,\sectionlang
当使用 beamer LaTeX 和 时,该命令似乎有问题\input
。没有显示错误,但在编译过程中该命令会被忽略。
在下面的代码示例中,一切都运行良好(该包multilanguage
来自上面的链接)
\documentclass{beamer}
\usepackage[ngerman,english]{babel}
\usepackage{ifthen}
\usepackage{multilanguage}
\setdoclang{en}{english}
% \setdoclang{de}{ngerman}
\begin{document}
\frame{
\tableofcontents
}
\sectionlang{en}{Section 1}
\sectionlang{de}{Abschnitt 1}
\frame{
\lang{de}{Folie 1}
\lang{en}{Slide 1}
}
%\mode<all>
%\input{./frame.tex}
%\mode*
%\againframe<1>{slide2}
\sectionlang{en}{Section 2}
\sectionlang{de}{Abschnitt 2}
\frame{
\lang{en}{Slide 3}
\lang{de}{Folie 3}
}
\end{document}
frame.tex 文件包含
\frame<0>[label=slide2]
{\frametitle{\lang{de}{Folie 2}
\lang{en}{Slide 2}}
\lang{de}{Folie 2}
\lang{en}{Slide 2}
}
但是,当\input
取消注释该块时,编译后的 ToC 不再包含第 2 节。
答案1
更新:
我认为最好的方法是建立两个tex
文件,每个需要的语言一个。然后目录、连字符等就可以正常工作了。当然,缺点是您必须更改两个(或更多)文件,具体取决于使用的语言数量。
另一种方法是使用包ifthenelse
,为使用的语言定义布尔变量,并将每个框架包含在构造中,例如:
\setboolean{MWEenglish}{true} % sets variable MWEenglish on true
\ifthenelse{\boolean{MWEenglish}}{%
% Then frame definition here
}{%
% Else part here (two language: frame in second language)
} % end ifthenelse
这应该可以帮助您将所有语言保存在一个文件中。
旧答案:
只是为了提示您如何进行,请查看以下 MWE。该包filecontents
用于编写更改的包文件multilanguage.sty
。
我添加了一行\newcommand{\frametitlelang}[2]{\lang{#1}{\frametitle{#2}}}
来获得一个新的宏\frametitlelang
。此宏用于根据语言构建框架标题。
\RequirePackage{filecontents}
% writes file multilanguage.sty
\begin{filecontents*}
\newcommand{\setdoclang}[2]
{
\main@language{#2}
\def\doclang{#2}
\def\doclangshort{#1}
}
\setdoclang{en}{english}
%
% Multilingual support commands
%
\newcommand{\langif}[3]
{
\ifthenelse{\equal{#1}{\doclang} \or \equal{#1}{\doclangshort}}
{#2}
{#3}%
}
\newcommand{\lang}[2]{\langif{#1}{#2}{}}
\newcommand{\sectionlang}[2]{\lang{#1}{\section{#2}}}
\newcommand{\subsectionlang}[2]{\lang{#1}{\subsection{#2}}}
\newcommand{\subsubsectionlang}[2]{\lang{#1}{\subsubsection{#2}}}
\newcommand{\frametitlelang}[2]{\lang{#1}{\frametitle{#2}}} % new macro
\end{filecontents*}
\documentclass{beamer}
\usepackage[ngerman,english]{babel}
\usepackage{ifthen}
\usepackage{multilanguage}
%\setdoclang{en}{english}
\setdoclang{de}{ngerman}
\begin{document}
\frame{
\tableofcontents
}
\sectionlang{en}{Section 1}
\sectionlang{de}{Abschnitt 1}
\frame{
\lang{de}{Folie 1}
\lang{en}{Slide 1}
}
\mode<all>
%\input{./frame.tex} %following is included frame.tex
\frame<0>[label=slide2]
{\frametitlelang{de}{Folie 2} % new macro
\frametitlelang{en}{Slide 2} % new macro
% }
\lang{de}{Folie 2}
\lang{en}{Slide 2}
}
\mode*
\againframe<1>{slide2}
\sectionlang{en}{Section 2}
\sectionlang{de}{Abschnitt 2}
\frame{
\lang{en}{Slide 3}
\lang{de}{Folie 3}
}
\end{document}