Beamer LaTeX 中的多种语言

Beamer LaTeX 中的多种语言

我想要创建一个包含多种语言的 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}

相关内容