我有三个.tex
文件。
- 包含文档中的所有诗句,格式如下:
\subsection*{वृद्धिरादैच् 1.1.1} \label{1.1.1}
- 包含解释 1
- 包含解释
有没有办法将这三个文档合并创建一个 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.tex
和expl2.tex
)使用不同的顺序。但是,如果您保持与相同的顺序verses.tex
,则可以加快编译速度,而无需搜索正确的键/条目。
为了完整起见,我Label
为每一节经文添加了一个,您可以直接使用它来\label{\CurrentLabel}
标记该节经文。
直接使用的一个限制datatool
是它仅适用于 ASCII 文本文件。但是,如果您需要其他语言支持(如您的帖子所建议),您可以\input
根据条件将每节经文的内容存储在一个文件中(例如)verses.tex
。
这filecontents
包裹加载它是为了使上述示例可移植,因此在您的应用程序中可能不需要它。
还存在其他选项,但需要(最有可能)外部应用程序将“数据库”交错成更易于管理的文档。