一个简短的例子

一个简短的例子

这个问题导致了一个新的方案的出现:
datestamp

我正在制作一本工作簿,我想让它显示最后修改的某一页。

如何在每页底部添加日期戳(fx“最后修改时间:2021 年 8 月 20 日”)。并使日期戳显示该特定页面的最后更改日期。

答案1

TeX 没有内部方法来记住 tex 文件各个部分的编辑时间。David 在评论中建议将不同的页面放在不同的文件中,并按原样为每页使用文件日期戳\input

在这里,我采用了不同的方法。我假设(我可能错了)您希望对文档的某些重要部分进行日期戳记,例如,每个表格都带有日期戳记。为此,我创建了一个环境,stamptabular该环境将日期戳记作为其第一个参数,然后再吸收常规tabular参数。此戳记显示在页脚(和页眉,如果需要)中。每页发送出去后,页面戳记将重置为默认文本。将这种方法扩展到其他环境很简单……tabular只是被选为一个工作示例。

除了创建需要盖章的特殊环境外,我还提供\DateStampAdd{}在文档中任意插入日期戳的功能。由于每页可能出现多个戳,因此任何给定页面的戳都会累积起来(在发货后重置之前)。

在 MWE 中:

  1. 未盖章的页面

  2. 此页有两页已盖章的条目

  3. 未盖章的页面

  4. 使用 消除页面顶部的页面印章\BottomPageStamp。此外,在页面上添加一个印章环境。

  5. Page Stamps 已全面停产\StopPageStamp

这是 MWE。当然,采用这种方法时,用户仍然需要承担在编辑文档时编辑 DateStamp 的负担。

\documentclass{article}
\usepackage{xcolor,everypage}
\AddEverypageHook{\StopPageStamp}
\newcommand\DefaultPageStamp{Date Stamps:}
\makeatletter
\def\thePageStamp{}
\def\thePageStampTOP{\thePageStamp}
\def\EmptyStyle{empty}
\def\PlainStyle{plain}
\def\PageStampColor{red}

\newcommand{\ps@pagestamp}{
  \renewcommand{\@oddhead}{\sffamily\color{\PageStampColor}%
                           \hfil\textbf{\Large\thePageStampTOP}\hfil}
  \renewcommand{\@evenhead}{\@oddhead}
  \renewcommand{\@evenfoot}{\sffamily\hfil
                            \begin{tabular}{c}
                            \textrm{\thepage}\\
                            \color{\PageStampColor}
                            \textbf{\Large\thePageStamp}
                            \end{tabular}
                            \hfil\gdef\thePageStamp{\DefaultPageStamp}}
  \renewcommand{\@oddfoot}{\@evenfoot}
}

\newcommand{\ps@emptypagestamp}{
  \renewcommand{\@oddhead}{\sffamily\color{\PageStampColor}%
                             \hfil\textbf{\Large\thePageStampTOP}\hfil}
  \renewcommand{\@evenhead}{\@oddhead}
  \renewcommand{\@evenfoot}{\sffamily\hfil
                            \begin{tabular}{c}
                            ~\\
                            \color{\PageStampColor}
                            \textbf{\Large\thePageStamp}
                            \end{tabular}
                            \hfil}
  \renewcommand{\@oddfoot}{\@evenfoot}
}
\makeatother
\newcommand\BottomPageStamp[1][\DefaultPageStamp]{%
  \PageStamp[#1]%
  \def\thePageStampTOP{}%
}

\newcommand\PageStamp[1][\DefaultPageStamp]{
  \gdef\thePageStamp{#1}
  \gdef\PlainStyle{pagestamp}
  \gdef\EmptyStyle{emptypagestamp}
  \pagestyle{\PlainStyle}
}

\newcommand\StopPageStamp[0]{
  \def\PlainStyle{plain}
  \def\EmptyStyle{empty}
  \pagestyle{\PlainStyle}
}

\newcommand\DateStampAdd[1]{%
  \expandafter\PageStamp\expandafter[\thePageStamp{}/#1/]%
}

\newenvironment{stamptabular}[1]
{\DateStampAdd{#1}\begin{tabular}}{\end{tabular}}

\PageStamp[\DefaultPageStamp]

\textheight=1in % FOR THIS MWE ONLY
\begin{document}

Page 1
\clearpage

Page 2

\begin{stamptabular}{2021-08-19}{cc}
\hline
This & is\\
my  stamped & tabular\\
\hline
\end{stamptabular}

Here I manually add an additional datestamp\DateStampAdd{2021-08-23}

\clearpage

Page 3
\clearpage

Page 4

\BottomPageStamp% IF YOU ONLY WANT STAMP AT PAGE  BOTTOM

\begin{stamptabular}{2020-05-01}{cc}
\hline
This & is\\
another  stamped & tabular\\
\hline
\end{stamptabular}

\clearpage

\StopPageStamp

Page 5

\end{document}

在此处输入图片描述


在此处输入图片描述


在此处输入图片描述


在此处输入图片描述


在此处输入图片描述

答案2

我编写了一个仅限 LuaLaTeX 的包,名为datestamp为了这 :)

它相当新,所以可能需要 2-3 天才能发布。如果你不耐烦,你可以克隆git 存储库;在目录l3build install中运行datestamp/datestamp。这将在您的本地 texmf 中安装包。

一个简短的例子

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{datestamp}

\begin{document}
The date I write with \verb|\adddatestamp| doesn't change.

\adddatestamp{firstds}
\end{document}

假设您的文件名是random.tex。运行上述代码将生成一个random.ds文件。假设您今天运行它;该.ds文件将包含以下文本。

firstds = "October 22, 2021"

然后将其解释为一个 lua 代码,该代码会生成firstds一个变量,然后该变量的值(即日期)会以 TeX 格式打印出来。只要您保存文件.ds,日期就不会改变,但假设您不.ds小心丢失了文件,仍然无需担心。您可以通过编写自己的.ds文件并使用文档中完全相同的键作为\adddatestamp命令参数来欺骗程序。

自动化示例

\documentclass{article}
\usepackage{kantlipsum}
\usepackage{datestamp}
\NewDocumentCommand{\dsfoot}{ }{%
  \adddatestamp{pn\thepage}%
}
\usepackage{fancyhdr}
\pagestyle{fancy}
\cfoot{}
\rfoot{Last modified: \dsfoot}

\begin{document}
\kant
\kant
\kant
\end{document}

\kant如果您在其他日期再添加两个s,这些页面将显示该特定日期。您的.ds文件将如下所示:

pn1 = "October 22, 2021"
pn2 = "October 22, 2021"
pn3 = "October 22, 2021"
pn4 = "October 22, 2021"
pn5 = "October 22, 2021"
pn6 = "October 22, 2021"
pn7 = "October 22, 2021"

如前所述;如果您希望在第 4 页上使用不同的日期,您可以编辑文件;将.ds的值更改为。从下一次编译开始;输出将仅显示在第 4 页。pn4"December 22, 2021"December 22, 2021


注意:使用变量名时请小心。Lua 似乎不喜欢只使用数字变量。我还没有深入研究;但使用\thepage而不是pn\thepage会引发奇怪的 Lua 错误。所以最好使用字母数字变量,如 ds1、pn1。

相关内容