交织 .tex 文件以创建单个 PDF

交织 .tex 文件以创建单个 PDF

我有三个.tex文件。

  1. 包含文档中的所有诗句,格式如下:\subsection*{वृद्धिरादैच् 1.1.1} \label{1.1.1}
  2. 包含解释 1
  3. 包含解释

有没有办法将这三个文档合并创建一个 PDF?

要创建单个 PDF 文件:

我需要在文档 2 和 3 中添加什么样的分隔符,才能在文档 1 中的相应诗句下显示来自这些文档的解释 1 和 2?

在文档 1 中,每个解释的开头都应显示一些标记(即规则或 exp1 exp2)。

如果我可以使用两种不同的字体大小那就太理想了。

答案1

交错来自三个不同.tex文件的内容并不容易。如果你能控制内容,并能以系统的方式生成内容,那么可以使用类似datatool“导入数据库”,然后按顺序(交错)解析它们以获得输出。或者,您可以将“解释 1”和“解释 2”的内容存储在单独的宏中,然后在阅读“诗句”时将它们写出。这完全取决于您在生成这三个文件时的控制程度。


以下是使用该包获取输出的一个小尝试datatool。但是,请注意以下警告:datatool文档

虽然 TEX 是一种出色的排版语言,但它并非设计为数据库管理系统,尝试将其用作数据库管理系统就像尝试用刀而不是螺丝刀来拧螺丝:虽然可以做到,但需要非常小心并且更耗时。 [...] 大型数据库和复杂操作仍会减慢处理文档所需的时间。因此,如果可以的话,最好首先使用创建数据的系统来执行复杂操作。

在此处输入图片描述

\documentclass{article}
\usepackage{filecontents}% http://ctan.org/pkg/filecontents
\usepackage{datatool}% http://ctan.org/pkg/datatool
\begin{filecontents*}{verses.tex}
Name,Label
First,first
Second,second
Last,last
\end{filecontents*}
\begin{filecontents*}{expl1.tex}
Label,Explanation
second,This is Explanation~1 for the second verse
first,This is Explanation~1 for the first verse
last,This is Explanation~1 for the last verse
\end{filecontents*}
\begin{filecontents*}{expl2.tex}
Label,Explanation
last,This is Explanation~2 for the last verse
first,This is Explanation~2 for the first verse
second,This is Explanation~2 for the second verse
\end{filecontents*}

\newcounter{myverse}
\newenvironment{myverse}[1]
  {% \begin{myverse}
  \refstepcounter{myverse}%
  \addvspace{2\baselineskip}\noindent
  \hfill {\Large\bfseries Verse~--~\themyverse~--~#1} \hfill\null\par\nobreak
  \noindent\hrulefill\par\nobreak
  }{% \end{myverse}
  }
\newenvironment{firstexpl}
  {% \begin{firstexpl}
    \par\nobreak{\large\bfseries Explanation~--~1:}\par\nobreak
  }{% \end{firstexpl}
    \par\hfill\ldots ends here.\par
  }
\newenvironment{secondexpl}
  {% \begin{secondexpl}
    \par\nobreak{\large\bfseries Explanation~--~2:}\par\nobreak
  }{% \end{secondexpl}
    \par\hfill\ldots ends here.\par
  }
\begin{document}
\DTLloaddb{verses}{verses.tex}% Load verses.tex
\DTLloaddb{expl1}{expl1.tex}% Load expl1.tex
\DTLloaddb{expl2}{expl2.tex}% Load expl2.tex

\DTLforeach*{verses}
  {\CurrentVerse=Name,\CurrentLabel=Label}{%
    \begin{myverse}{\CurrentVerse}\label{\CurrentLabel}
      \DTLgetvalueforkey{\explanation}{Explanation}{expl1}{Label}{\CurrentLabel}%
      \begin{firstexpl}\explanation\end{firstexpl}
      \DTLgetvalueforkey{\explanation}{Explanation}{expl2}{Label}{\CurrentLabel}%
      \begin{secondexpl}\explanation\end{secondexpl}
    \end{myverse}
  }
\end{document}

myverse环境中,datatool搜索与该特定诗句相关的适当解释Name。这允许您对每个解释(expl1.texexpl2.tex)使用不同的顺序。但是,如果您保持与相同的顺序verses.tex,则可以加快编译速度,而无需搜索正确的键/条目。

为了完整起见,我Label为每一节经文添加了一个,您可以直接使用它来\label{\CurrentLabel}标记该节经文。

直接使用的一个限制datatool是它仅适用于 ASCII 文本文件。但是,如果您需要其他语言支持(如您的帖子所建议),您可以\input根据条件将每节经文的内容存储在一个文件中(例如)verses.tex

filecontents包裹加载它是为了使上述示例可移植,因此在您的应用程序中可能不需要它。


还存在其他选项,但需要(最有可能)外部应用程序将“数据库”交错成更易于管理的文档。

相关内容