在计算之前显示计算结果

在计算之前显示计算结果

我想要在一个文档中执行各种计算,但我希望这些计算的结果显示在文档的开头。

我有以下方法,但不幸的是输出始终为 0。

\documentclass{article}
\usepackage{fp} % Paket für die Berechnungen
\usepackage{etoolbox} % Paket für zusätzliche Befehle wie \AtEndDocument

% Befehl zur Speicherung des Ergebnisses definieren
\newcommand{\result}{0}

\begin{document}

% Das Ergebnis der Berechnung wird hier angezeigt
Das Ergebnis der Berechnung ist: \result

% Weitere Inhalte des Dokuments...
% ...

% Berechnung am Ende des Dokuments durchführen
\AtEndDocument{
  \FPeval{\result}{clip(2*3+4)}
  \global\let\result\result % Das Ergebnis global verfügbar machen
}

\end{document}

我该如何更改代码以显示正确的结果?我不想使用任何其他文件。

答案1

TeX 会扩展宏,因此不可能\result扩展到文件中稍后定义的某个内容。但您可以使用钩子\AtEndDocument(您不需要etoolbox)将值写入aux文件。这就是标签的工作原理。

\documentclass{article}
\usepackage{fp} % Paket für die Berechnungen

% Befehl zur Speicherung des Ergebnisses definieren
\newcommand*{\result}{0}

\begin{document}

% Das Ergebnis der Berechnung wird hier angezeigt
Das Ergebnis der Berechnung ist: \result

\makeatletter
% Berechnung am Ende des Dokuments durchführen
\AtEndDocument{%
  \FPeval{\result}{clip(2*3+4)}%
  \write\@auxout{\global\string\def\string\result{\result}}%
}
\makeatother

\end{document}

在此处输入图片描述

显然,您需要运行 TeX 至少两次才能正确显示结果。

答案2

添加到现场Campa 的回答,我会添加一个界面来管理任意数量的变量。

这是为 量身定制的fp。在计算结束时,您可以使用存储值的宏(默认)保存该值并为其命名(在示例x和中) 。y\result

在 LaTeX 运行结束时,收集的值将被转储到辅助文件中,以便可以在下一次运行开始时读入它们。

\documentclass{article}
\usepackage[nomessages]{fp}

\ExplSyntaxOn

\prop_new:N \g_hr_variables_out_prop
\prop_new:N \g_hr_variables_in_prop

\NewDocumentCommand{\savevariable}{O{\result}m}
 {
  \prop_gput:Nne \g_hr_variables_out_prop { #2 } { #1 }
 }

\NewDocumentCommand{\printvariable}{m}
 {
  \prop_item:Nn \g_hr_variables_in_prop { #1 }
 }

\NewDocumentCommand{\VARIABLES}{m}
 {
  \prop_gset_from_keyval:Nn \g_hr_variables_in_prop { #1 }
 }

\AtEndDocument
 {% dump the variables in the aux file
  \iow_shipout:ce { @mainaux }
   {
    \VARIABLES
     {
      \prop_map_function:NN \g_hr_variables_out_prop \__hr_variables_dump:nn
     }
   }
 }

\cs_new:Nn \__hr_variables_dump:nn { #1=#2, }

\ExplSyntaxOff

\begin{document}

Variable $x$ is $\printvariable{x}$.

Variable $y$ is $\printvariable{y}$.

\section{Main}

We set a variable to \FPadd{\result}{2}{2}\savevariable{x}\result

We set another variable to \FPmul{\y}{2}{3}\savevariable[\y]{y}\y

\end{document}

运行结束时,aux 文件将具有

\VARIABLES {
x=4.000000000000000000,
y=6.000000000000000000,
}

当变量发生变化时,这显然需要运行两次。

在此处输入图片描述

相关内容