我可以使用命令设置变量,然后在文档中较早地使用该变量吗?
具体来说,我想从修订记录表格并将其放在我的页脚中。
在我的中*.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}{ ... }{ ... }
但有两个问题:
- 我的页脚总是显示
?
。 - 即使
\@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.
但或许我必须接受这一点。