创建多语言文档

创建多语言文档

我正在尝试用英语和法语编写一份文档(就像您在某些飞机上可以找到的文档一样)。我使用以下声明来使用babel

\usepackage[english,frenchb]{babel}
\babeltags{en = english}
\babeltags{fr = frenchb}

这对于段落和排版非常有用。

现在我还想添加标题(\sections)。我遵循了之前的答案:https://tex.stackexchange.com/a/170963/27327。这允许创建 2 个不同的目录,但文档中只显示法语标题(所有\addetoc内容均被忽略)。

那么有没有简单的方法来创建多语言文档?

我想要的是类似这样的东西:

目录页:

|------------------------+-------------------------|
| table of content       | Table des matieres      |
|------------------------+-------------------------|
| Fist section         3 | Première section      3 |
| Second section      10 | Deuxième section     10 |
| ...                    | ...                     |
|                        |                         |
|------------------------+-------------------------|

\section页面上:

|--------------------------------------------------|
| First Section  -  Première Section             3 |
|--------------------------------------------------|
| Text in English                                  |
|                                                  |
|--------------------------------------------------|
| Text in French                                   |
|                                                  |
|--------------------------------------------------|

我唯一缺少的是:

  • 如何用多种语言显示某一部分
  • 如何在同一页面中显示两列目录(每种语言一列)

提前致谢。

答案1

也许是这样的?(警告,章节标题没有正确换行!)

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,frenchb]{babel}
\babeltags{en = english}
\babeltags{fr = frenchb}
\usepackage{xpatch}
\usepackage{xparse}

\usepackage{blindtext}

\usepackage{parcolumns}




\makeatletter

\patchcmd{\pc@placeboxes}{\vrule}{{\VRULE}}{}{}
\newcommand\VRULE{\color{SOME_COLOR}\vrule width 0.2mm}



\def\@sect#1#2#3#4#5#6[#7]#8{%
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \protected@edef\@svsec{\@seccntformat{#1}\relax}%
  \fi
  \@tempskipa #5\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #6{%
        \@hangfrom{\hskip #3\relax}%\@svsec}
          \interlinepenalty \@M  #8 \hfill\thepage\@@par}%
    \endgroup
    \csname #1mark\endcsname{#7}%
    \addcontentsline{toc}{#1}{%
      \ifnum #2>\c@secnumdepth \else
        \protect\numberline{\csname the#1\endcsname}%
      \fi
      #7}%
  \else
    \def\@svsechd{%
      #6{\hskip #3\relax
      \@svsec #8}%
      \csname #1mark\endcsname{#7}%
      \addcontentsline{toc}{#1}{%
        \ifnum #2>\c@secnumdepth \else
          \protect\numberline{\csname the#1\endcsname}%
        \fi
        #7}}%
  \fi
  \@xsect{#5}}



\let\latex@@section\section
\RenewDocumentCommand{\section}{somo}{%
  \IfBooleanTF{#1}{%
    \latex@@section*{#3}%
  }{%
    \def\@temp@@a{#3}
    \IfValueT{#4}{%
      \xdef\@temp@@a{#3 -- #4}
    }
    \IfValueTF{#2}{%
      \latex@@section[#2]{\@temp@@a}%
    }{%
      \latex@@section[#3]{\@temp@@a}
    }%
    \IfValueT{#4}{%
      \addcontentsline{ftoc}{section}{\protect\numberline{\csname thesection\endcsname}#4}
    }%
  }%
}



\renewcommand\tableofcontents[1][toc]{%
  \section*{\contentsname
    \@mkboth{%
      \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
  \@starttoc{#1}%
}



\makeatother  

\begin{document}

\begin{parcolumns}[nofirstindent,rulebetween=true]{2}
    \colchunk{%
        \selectlanguage{english}
        \tableofcontents
    }
    \colchunk{%
      \selectlanguage{french}
      \tableofcontents[ftoc]
    }
\end{parcolumns}
\pagebreak

\section{First section}[Première Section]
\selectlanguage{english}
\blindtext
\selectlanguage{frenchb}
\blindtext
\section{Second Section}[Deuxième Section]
\selectlanguage{english}
\blindtext

\selectlanguage{frenchb}
\blindtext


\end{document}

在此处输入图片描述

答案2

使用以下宏可以帮我完成这项工作:

\newlength{\sect@@width}
\usepackage{calc}
\newcommand\mlsection[2]{%
  \refstepcounter{section}
  \begingroup
  \def\temp@@a{\noindent{#1}\hfill{#1}}
  \setlength{\sect@@width}{\widthof{\temp@@a}}
  \ifdim \sect@@width>\textwidth
  \noindent#1\newline
  \noindent#2
  \else
  \temp@@a
  \fi
  \endgroup
  \addcontentsline{toc}{section}{\protect\numberline{\csname thesection\endcsname}#1}
  \addcontentsline{ftoc}{section}{\protect\numberline{\csname thesection\endcsname}#2}
}%

注意:这不是一个通用的解决方案,它处理章节编号(目录中除外)或格式化。

编辑:生成的 PDF 文档中的目录链接也不太好用。只toc显示表格中的链接,ftoc不显示链接。

EDIT2:我最终找到了一个简约的工作解决方案(没有 par skip、widow、club 等)但 PDF 文档中的链接有效:

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,frenchb]{babel}
\babeltags{en = english}
\babeltags{fr = frenchb}
\usepackage{xpatch}
\usepackage{xparse}

\usepackage{blindtext}

\usepackage{parcolumns}

\usepackage{bookmark}



\makeatletter


\usepackage{printlen}
\newlength{\sect@@width}
\usepackage{calc}
\newcommand\@mlsection[4]{%
  \refstepcounter{section}%
  \begingroup%
  \currentpdfbookmark{#1}{section.\csname thesection\endcsname}%
  \currentpdfbookmark{#2}{section.\csname thesection\endcsname}%
  \vspace{1em}%
  \def\temp@@a{\LARGE\noindent{#3}\hfill{#4}}%
  \setlength{\sect@@width}{\widthof{\temp@@a}}%
  \ifdim \sect@@width>\textwidth%
  \noindent\LARGE#3\newline%
  \noindent\LARGE#4%
  \else%
  \temp@@a%
  \fi%
  \newline
  \endgroup%
  \addcontentsline{entoc}{section}{\protect\numberline{\csname thesection\endcsname}#1}%
  \addcontentsline{frtoc}{section}{\protect\numberline{\csname thesection\endcsname}#2}%
}%

\newcommand\mlsection[2]{%
  \begingroup%
  \@mlsection{#1}{#2}{\selectlanguage{english}#1}{\selectlanguage{frenchb}#2}%
  \endgroup%
}%

\renewcommand\tableofcontents[1][toc]{%
  \section*{\contentsname
    \@mkboth{%
      \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
  \@starttoc{#1}%
}

\makeatother



\begin{document}

\begin{parcolumns}[nofirstindent,rulebetween=true]{2}
    \colchunk{
        \selectlanguage{frenchb}
        \tableofcontents[frtoc]
        %\shorttableofcontents{\contentsname}{1}
    }
    \colchunk{
        \selectlanguage{english}
        \tableofcontents[entoc]
    }
\end{parcolumns}

\newpage

\mlsection{First section}{Première Section}
{\selectlanguage{english}\blindtext}

{\selectlanguage{frenchb}\blindtext}

\mlsection{Second Section}{Deuxième Section}
{\selectlanguage{english}\blindtext}

{\selectlanguage{frenchb}\blindtext}

\mlsection{Third Section}{Troisième Section}
{\selectlanguage{english}\blindtext}

{\selectlanguage{frenchb}\blindtext}

\mlsection{Fourth Section}{Quatrième Section}
{\selectlanguage{english}\blindtext}

{\selectlanguage{frenchb}\blindtext}

\end{document}

诀窍是使用toc来生成锚点(section.N)并\currentpdfbookmark创建指向 的 PDF 链接section.N。OTOH 同时创建entocfrtoc显示双语内容表。

相关内容