准备双语文档并仅输出一种语言的最简洁方法

准备双语文档并仅输出一种语言的最简洁方法

我目前正在准备实习评估的演讲稿。作为一名接受可能说法语也可能不说法语的研究人员评估的法国学生,我希望保留两个版本的演讲稿,法语和英语。

我可以创建两个单独的文件,但我确信维护这两个文件会很复杂,而且我很可能也会忘记将任何版本的更正移植到另一个版本中。因此,我更倾向于将它们保存在同一个文件中(事实上是文件:我习惯为文档的每个部分创建单独的文件,并在最后将它们全部包含进去)。

下面是一个 MWE,展示了我如何做到这一点:

\documentclass{beamer}


\usepackage[T1]{fontenc}
\usepackage[english, french]{babel}
\usepackage{etoolbox}
\usepackage{blindtext}

%\includeonlylecture{english}
%\includeonlylecture{french}

\newcommand{\switch}[1]{%Use with "french" or "english" to switch between languages
%Security check
\ifstrequal{#1}{french}%
{}%
{\ifstrequal{#1}{english}%
    {}%
    {\PackageError{switch}{Invalid input}{Received "#1" instead of "french" or "english"}}%
}
\lecture{#1}{#1}
\selectlanguage{#1}
\ifstrequal{#1}{french}%
    {%
    \title{French title}
    }%
    {\ifstrequal{#1}{english}%
        {%
        \title{English title}
        }%
        {}%
    }
}

\begin{document}

\switch{english}
\begin{frame}
\titlepage
\end{frame}

\switch{french}
\begin{frame}
\titlepage
\end{frame}

\switch{english}
\begin{frame}{English frame}
\blindtext
\end{frame}

\switch{french}
\begin{frame}{French frame}
\blindtext
\end{frame}

\end{document}

通过使用\switchenglishfrench使用选择所需的输出语言\includeonlylecture,我设法仅输出文档的相应一半。

我觉得有必要在每次切换时重新定义标题,因为我使用的主题JuanLesPins显示每张幻灯片顶部指定的最后标题。

我的问题是:有没有更简洁的方法来完成我想做的事情,即用两种不同的语言准备每张幻灯片的两个连续版本并且只输出其中一种?

答案1

comment使用包非常容易

\documentclass{beamer}
\usepackage{comment}


 % for english
\includecomment{english}
\excludecomment{french}
%  for french
%\includecomment{french}
%\excludecomment{english}


\begin{french}
\usepackage[french]{babel}
\end{french}

\usepackage{blindtext}


\begin{french}
\title{Titre}
\author{Moi}
\end{french}

\begin{english}
\title{Title}
\author{Me}
\end{english}

\begin{document}

\begin{frame}
\titlepage
\end{frame}

\begin{frame}
\tableofcontents
\end{frame}


\begin{french}
\section{Bon}
\subsection{jour}

\begin{frame}{French frame}
\blindtext 
\end{frame}
\end{french}

\begin{english}

\section{Hellow}
\subsection{world}

\begin{frame}{English frame}
\blindtext 
\end{frame}
\end{english}

\end{document}

这是第一个解决方案编辑以填写下面的评论

\documentclass{beamer}

\newif\iffrenchb 

% uncomment next line for french
%\frenchbtrue

\newcommand{\iffrench}[2]{\iffrenchb #1\else #2\fi}
\newsavebox\efframe

\iffrench{
\usepackage[frenchb]{babel}
}{
\usepackage[english]{babel}
}

\usepackage{blindtext}


\iffrench{
\newenvironment{french}{\begin{frame}}{\end{frame}}
\newenvironment{english}{\begin{lrbox}{\efframe}}{\end{lrbox}}
}{
\newenvironment{english}{\begin{frame}}{\end{frame}}
\newenvironment{french}{\begin{lrbox}{\efframe}}{\end{lrbox}}
}

\iffrench{
\title{Titre}
\author{Moi}
}{
\title{Title}
\author{Me}
}
\begin{document}

\begin{frame}
\titlepage
\end{frame}

\begin{frame}
\tableofcontents
\end{frame}

\iffrench{
\section{Bon}
\subsection{jour}
}{
\section{Hellow}
\subsection{world}
}

\begin{french}
{French frame}
\blindtext
\end{french}


\begin{english}
{English frame}
\blindtext
\end{english}


\begin{french}
{French frame}
\blindtext
\end{french}

\begin{english}
{English frame}
\blindtext
\end{english}

\end{document}

相关内容