假设我有一个大型数学模型,其中包含许多方程式和方程式描述,这些方程式分布在多个部分。该模型以各种形式用于其他文档中。
例如,一份文件可能只是以原始形式逐一列出方程式。另一份文件可能先有介绍,然后是方程式及其说明,最后是讨论和结论。我可能还会在多张幻灯片上用投影仪展示许多关键方程式。
当我发现模型存在问题,或者有更好的表达方程式的方法时,我必须更新每一篇文档。这既耗时又容易出错。
慢慢地,随着时间的推移和多次修改之后,每份文件开始出现差异。
我知道 LaTeX 是一个非常先进的软件包,有许多有用的命令。有什么办法可以解决这个难题吗?也许将方程式和描述存储在分段的文本文件中,然后仅将特定段导入每个文档?
答案1
创建一个包含方程式的本地包怎么样?
例如,在与 LaTeX 文档相同的目录中创建“eqns.sty”,并为您的方程式创建命令:
\ProvidesPackage{eqns}
\newcommand{\Einstein}{\ensuremath{E=mc^2}}
\newcommand{\DescrEinstein}{This is the most famous equation from Relativity.}
\newcommand{\Linear}{\ensuremath{y=mx+c}}
\newcommand{\DescLinear}{The general equation for a straight line.}
\newcommand{\Quadratic}{\ensuremath{x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}}}
\newcommand{\DescrQuadratic}{The equation for the roots of a quadratic.}
这些命令可以在内联和显示数学环境中使用:
\documentclass{article}
\usepackage{eqns} % Use the equations
\begin{document}
The Einstein equation (\(\Einstein\)): \DescrEinstein
\begin{equation}
\Einstein
\end{equation}
The straight-line equation (\(\Linear\)): \DescrLinear
\begin{displaymath}
\Linear
\end{displaymath}
The quadratic formula (\(\Quadratic\)): \DescrQuadratic
\begin{equation}
\Quadratic
\end{equation}
\end{document}
答案2
所以看起来你有一个一般主题对于要以多种不同方式排版的文档。为此,我将定义多个布尔变量/条件,并相应地对文档内容进行分组。这样,您可以对文档结构进行单个更改,但内容将自然地从中流出。
以下是文档结构的简单示例:
\documentclass{<class>}
% <packages>
% <conditional definitions>
% <conditional declarations>
\begin{document}
% <condition 1>
% <document content>
% <end condition 1>
% <condition 2>
% <document content>
% <end condition 2>
% <more document content>
% ...
\end{document}
以下是实现上述用例的 MWE:
\documentclass{article}
% <packages>
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
% <conditional definitions>
\newif\ifdocumenttext
\newif\ifequationdescriptions
\newif\ifequations
% <conditional declarations, default is all false>
\documenttexttrue% In-/exclude document text
\equationstrue% In-/exclude equations
\equationdescriptionstrue% In-/exclude equation descriptions
\begin{document}
\ifdocumenttext%
\section{Introduction}
This is my introduction
\fi%
\ifequations%
\[
f(x) = ax^2 + bx + c
\]
\ifequationdescriptions%
The above equation is a second-order polynomial in~$x$.
\fi%
\fi%
\ifequations%
\begin{equation}
g(x) = ax^3 + bx^2 + cx + d \label{eqn:poly}
\end{equation}
\ifequationdescriptions%
In~(\ref{eqn:poly}), $g(x)$ has at most three roots.
\fi%
\fi%
\ifdocumenttext%
\section{Conclusion}
This is my conclusion
\fi%
\end{document}
上述 MWE 编译为:
注释掉\documenttexttrue
(或使用\documenttextfalse
)编译为
另外注释掉\equationdescriptionstrue
(或使用\equationdescriptionsfalse
)编译为
总体意图类似于创建完整的文档全部内容,但使用条件语句以全局但系统的方式选择性地注释掉您不想要的部分作为文档内容的一部分。当然,您可以扩展条件语句,以不同的方式包含它们,甚至可以使用提供此功能的包(例如etoolbox
)。我刚刚在上面展示了一个用例来引导您朝着正确的方向前进。您甚至可以包含条件来正确排版不同类别下的文档,例如beamer
。请注意,条件嵌套也是可能的。
通过将内容添加到单独的文件并使用 将它们包含在文档中,可以实现进一步的抽象\input{<filename>}
。条件的定义也可以制作成单独的文件,或者作为您通过 使用的\input
本地文件的一部分。但是,目前,我不确定这是否是您想要的。.sty
\usepackage{<style file>}
上例中自由使用%
允许文档在不同的条件设置下正确编译。请参阅%
行末百分号 ( ) 有什么用?以了解其使用意义。