是否可以将所有数学公式写在单独的文件中,然后根据需要将其添加到主文件中?

是否可以将所有数学公式写在单独的文件中,然后根据需要将其添加到主文件中?

考虑一下这个场景:我要写一份报告,我想写全部单独的文件中的数学公式,然后根据需要将它们添加到主报告文件中(即在报告的特定部分中包含/导入/添加/调用某个公式)。

请注意,我不是在谈论引用或引证(\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}$。但这真的是一个坏主意。使用\newcommands。或者更好的是,使用\newcommand你的公共子表达式,但在每个实例中从这些子表达式构建实际方程。

但实际上,如果您以编程方式生成方程式(例如,作为某些计算机代数系统的输出),上述方法会很有用。

相关内容