将变量存储在辅助文件中

将变量存储在辅助文件中

我可以使用命令设置变量,然后在文档中较早地使用该变量吗?

具体来说,我想从修订记录表格并将其放在我的页脚中。

在我的中*.tex,我有一个用于版本历史表的环境和命令,我使用它如下:

\begin{history}
  \version{1.0}{1 April 2020}{Initial Release}
  \version{1.1}{10 Oct 2021}{Updated chapter 2}
\end{history}

*.cls目前有:

\pagestyle{fancy} % Imports header style
\fancyhf{} % Clear header/footer
\fancyfoot[L]{\@title}
...
\newcommand{\version}[3]{#1 & #2 & #3\\\hline}
\newenvironment{history}{ ... }{ ... }

我正在考虑这样做:

\def\@revision{?}

\pagestyle{fancy} % Imports header style
\fancyhf{} % Clear header/footer
\fancyfoot[L]{\@title Rev\@revision}

\newcommand{\version}[3]{%
  \def\@revision{#1}%
  #1 & #2 & #3\\\hline%
}
\newenvironment{history}{ ... }{ ... }

但有两个问题:

  1. 我的页脚总是显示?
  2. 即使\@revision更新了,我的版本历史记录表也不在第一页。所以我想它只会为后面的页面设置值。

有没有办法将我的修订存储在*.out或中*.aux?然后我的页脚可以在文档开头使用该值,并且如果它自上次运行以来发生变化,我将获得重新运行文件检查?

我找到了一个有希望的答案这里但它保存了计数器(我假设它们只用于整数)。我对能够处理[a-zA-Z0-9\.]+

答案1

如果条目与上次运行收集的最新修订号一致,您可以有条件地设置标签。

\documentclass{article}
\usepackage[raiselinks]{hyperref}

\makeatletter
\newenvironment{history}
 {%
  \begin{center}
  \begin{tabular}{|c|c|l|}
  \hline
  Rev & Date & Reason \\ \hline
 }
 {%
  \end{tabular}
  \end{center}
  \immediate\write\@auxout{\gdef\string\lastrevisionnumber{\@revision}}%
 }

\newcommand{\version}[3]{%
  #1\gdef\@revision{#1}%
  \ifx\@revision\lastrevisionnumber
    \def\@currentlabel{#1}\label{lastrevision}%
  \fi & #2 & #3 \\ \hline
}
\newcommand{\lastrevisionnumber}{??}
\newcommand{\lastrevision}{\ref{lastrevision}}
\makeatother

\begin{document}

\title{Test}
\author{me}
\maketitle

\begin{history}
  \version{1.0}{1 April 2020}{Initial Release}
  \version{1.1}{10 Oct 2021}{Updated chapter 2}
\end{history}

\newpage

The last revision is \lastrevision.

\end{document}

您可以在任何您想要的地方使用\lastrevision

答案2

我设法从这个解决方案中改编了一个答案: https://tex.stackexchange.com/a/160035/205379

首先我定义一个用于设置修订的命令:

\newcommand{\setrev}[1]{%                                                       
  \protected@write \@auxout {}{\string \newlabel{revision}{{#1}{\thepage}{#1}{revision}{}} }%
  \hypertarget{revision}{#1}                                                    
}       

然后我可以使用以下命令访问修订版本\ref{revision}

\pagestyle{fancy} % Imports header style
\fancyhf{} % Clear header/footer
\fancyfoot[L]{\@title Rev:\ref{revision}}

然后我可以在我的文档中设置修订:

\newcommand{\version}[3]{%
  \setrev{#1}#1 & #2 & #3\\\hline%
}

我确实收到了警告:

LaTeX Warning: There were multiply-defined labels.

但或许我必须接受这一点。

相关内容