考虑一下这个场景:我要写一份报告,我想写全部单独的文件中的数学公式,然后根据需要将它们添加到主报告文件中(即在报告的特定部分中包含/导入/添加/调用某个公式)。
请注意,我不是在谈论引用或引证(\ref
或\cir
)该公式。我想要的是将公式本身包含在生成的 PDF 中。有点像编程语言中的函数调用!
这可能吗?
答案1
您可以将(几乎)任意的 LaTeX 代码放入宏中以供以后使用。因此,您可以使用它们来存储方程式。下面是一个简单的示例,展示了一些可能性:
\documentclass{article}
%% Can be in external file which can be inserted with \input
\newcommand{\myeqintf}{f(x) = \int_a^x g(t)\,dt}
\newcommand{\myeqintt}{\begin{displaymath} f(x) = \int_a^x g(t)\,dt \end{displaymath}}
\newcommand{\myeqint}{\begin{equation} f(x) = \int_a^x g(t)\,dt \label{eq:int}\end{equation}}
\newcommand{\myeqintl}[1]{\begin{equation} f(x) = \int_a^x g(t)\,dt \label{#1}\end{equation}}
%%%%%%%%%%%%%%%%%%%
\begin{document}
An equation \( \myeqintf \) inline. The same equation displayed
\begin{displaymath}
\myeqintf .
\end{displaymath}
A stored display.
\myeqintt
A stored display with fixed label
\myeqint
don't reuse!! A stored display with specified label
\myeqintl{eq:intl}
\end{document}
如您所见,您必须考虑许多问题。是只保存公式主体还是保存整个显示环境?是否应包括公式编号?标点符号呢?(breqn 包可以帮助解决后一个问题。)同时这也使得很难调整公式以适应不同的情况。
答案2
您的评论表明您希望拥有某种方程式数据库。一个简单的方法是有一个单独的文件equations.tex
,例如,定义两个宏
\saveequation{<ID>}{<equation code>}
\useequation{<ID>}
还包含用定义的方程式,\saveequation
可能还会调用一些经常需要的相关包。调整 Harish 的示例,如下所示:
\documentclass{article}
% this is the separate file for the sake of this example
% created with {filecontents}:
\usepackage{filecontents}
\begin{filecontents}{equations.tex}
\makeatletter
% \saveequation{<ID>}{<equation>}
\newcommand\saveequation[2]{%
\@namedef{equation@#1}{#2}%
}
% \useequation{<ID>}
\newcommand\useequation[1]{%
\@nameuse{equation@#1}%
}
\makeatother
\RequirePackage{amsmath,bm}
\saveequation{massenergy}{E = mc^{2}}
\saveequation{curlE}{\nabla \times \bm{E} = 0}
\end{filecontents}
% input the file:
\input{equations}
\begin{document}
% usage:
This is Einstein's relation: $\useequation{massenergy}$.
This is the curl of electric field:
\begin{equation}
\useequation{curlE}\label{eq:curlE}
\end{equation}
and without number:
\[
\useequation{curlE}
\]
\end{document}
答案3
您还可以使用catchfilebetweentags
包。此包可让您使用单独的文件来存储方程式,然后使用您指定的标签来引用它们。
这篇博文从外部文件加载方程,很好地解释了这一点,但是为了懒人,我将举一个例子:
首先,将方程式放入.tex
文件中,并使用标签 ( <*eq01>
) 分隔它们:
%<*eq01>
\begin{equation}
{x = \frac{ { - b \pm \sqrt {b^2 - 4ac} } }{2a}}
\end{equation}
%</eq01>
然后在主文件中执行以下操作:
\documentclass[11pt]{article}
\usepackage{amssymb,amsmath}
\usepackage{catchfilebetweentags}
\newcommand{\loadeq}[1]{%
\ExecuteMetaData[equations.tex]{eq#1}%
}
% Begin document
\begin{document}
Look at equation eq01!
\loadeq{01}
\end{document}
瞧!
示例源自上述博客文章。
答案4
如果需要,您可以为每个公式创建一个单独的文件,然后使用 包含每个公式\input{filename}
。例如,如果您有一个名为的文件,euler.tex
则只需
$e^{i \pi} + 1 = 0$
然后你只需要使用$\input{euler}$
。但这真的是一个坏主意。使用\newcommand
s。或者更好的是,使用\newcommand
你的公共子表达式,但在每个实例中从这些子表达式构建实际方程。
但实际上,如果您以编程方式生成方程式(例如,作为某些计算机代数系统的输出),上述方法会很有用。