我如何添加版本控制信息(比如说页脚?)

我如何添加版本控制信息(比如说页脚?)

我想跟踪文档的修订,并且基本上对所有事情都使用版本控制软件(顺便说一下,SVN,单调增加的修订号本身就是其奖励)。

我想添加 SVN 标签,例如$Id$,SVN 会用修订 ID 替换此标签(如果设置了该属性)。如果能以某种方式显示此标签,我会很高兴,这样我就可以更轻松地跟踪事情。理想情况下,我希望将此信息放在标题下方,即组成文档的文件列表(这些 ID 的列表)

如果有帮助的话,我正在使用子文件来允许它跨越多个 tex 文件。

我希望有一种简单/可行的方法来做到这一点。

然后我想以某种方式编译该文档并且不显示任何这些信息。

我对 LaTeX 预处理器进行了一些搜索(因此,例如,如果我想要这个信息,我可以定义一个常量),但随后我必须搜索在前端显示的信息(可以做到,内容页面证明了这一点)并将它们全部拼接在一起。

我怀疑我是不是第一个想这么做的人,所以,与其重新发明轮子,我还是问你们吧。

答案1

你试过问搜索引擎吗?第一个链接提到svn-multi,它可以完全实现您想要实现的功能。

您可以通过将其添加到您的文档来从您的存储库中获取信息。

\svnidlong
{$HeadURL$}
{$LastChangedDate$}
{$LastChangedRevision$}
{$LastChangedBy$}

将 设置为svn:keywordsHeadURL LastChangedDate LastChangedRevision LastChangedBy

然后\usepackage{fancyhdr}你可以添加信息(存储库 URL、上次修订和上次提交的时间),如下所示

\pagestyle{fancy}
\fancyfoot{}
\fancyfoot[OR]{\tiny \href{\svnkw{HeadURL}}{Revision \svnkw{LastChangedRevision}} --- last commit on \svnkw{LastChangedDate} --- page \thepage}
\fancyfoot[EL]{\tiny page \thepage\ --- \href{\svnkw{HeadURL}}{Revision \svnkw{LastChangedRevision}} --- last commit on \svnkw{LastChangedDate}}

看一眼本文由 Mark Eli Kalderon 在 2007 年的 PracTeX Journal 中撰写,很好地解释了一切。

答案2

这个\Pagestamp[]宏是我为我们的一个内部样式编写的。如果没有可选参数,它将使用单词DRAFT作为页面标记。但是,您可以使用可选参数 place(就像我做的那样)\today为文档添加日期标记。如果您在 中定义了版本号\def,也可以将其包括在内。

\StopPageStamp将会停止在后续页面上盖章。

在这种情况下,印章将应用于页眉和页脚。这可以在ps@...定义中重新进行。

已编辑,保留原始页面尺寸不变。

\documentclass{article}
\usepackage{lipsum}
\makeatletter
\def\PageStampFlag{F}
\def\thePageStamp{}
\newcommand{\ps@pagestamp}{
  \renewcommand{\@oddhead}{\hfil\textbf{\Large\thePageStamp}\hfil}
  \renewcommand{\@evenhead}{\@oddhead}
  \renewcommand{\@evenfoot}{\hfil
                            \begin{tabular}{c}
                            \textrm{\thepage}\\
                            \textbf{\Large\thePageStamp}
                            \end{tabular}
                            \hfil}
  \renewcommand{\@oddfoot}{\@evenfoot}
}

\newcommand{\ps@emptypagestamp}{
  \renewcommand{\@oddhead}{\hfil\textbf{\Large\thePageStamp}\hfil}
  \renewcommand{\@evenhead}{\@oddhead}
  \renewcommand{\@evenfoot}{\hfil
                            \begin{tabular}{c}
                            ~\\
                            \textbf{\Large\thePageStamp}
                            \end{tabular}
                            \hfil}
  \renewcommand{\@oddfoot}{\@evenfoot}
}
\newcommand\PageStamp[1][DRAFT]{
  \def\PageStampFlag{T}
  \def\thePageStamp{#1}
  \def\PlainStyle{pagestamp}
  \def\EmptyStyle{emptypagestamp}
  \pagestyle{\PlainStyle}
}

\newcommand\StopPageStamp[0]{
  \def\PageStampFlag{F}
  \def\PlainStyle{plain}
  \def\EmptyStyle{empty}
  \pagestyle{\PlainStyle}
}
\makeatother
\begin{document}
\PageStamp[\today]
Does this page have a stamp?

\lipsum[1-6]
\StopPageStamp
The stamp should be gone.
\end{document}

在此处输入图片描述

在此处输入图片描述

答案3

这是我使用的变体。它是 svn 特有的。它不会更改页面布局。很容易关闭。它不会干扰已配置的页眉/页脚。我添加了一个命令来打印包含标题、作者等的初始页面,以及用于生成文档的所有文件的修订信息表。

以下是启用了邮票并包含初步页面的前两页示例:

包含 svn 信息的前两页(草稿)

这利用了几个包。prelim2e可以很容易地在页面底部包含信息(以下常规页脚)并在使用和不使用之间切换。我还在自定义命令中使用了来自包的条件,该命令包含修订信息表,因为您提到想要包含所有文件的信息,而不仅仅是主文件。

像 Habi 一样,我曾经使用它svn-multi来获取包含的 svn 信息。我曾\tableofrevisions在自定义命令中使用它来包含所有文件的信息。url用于格式化 url。

titling用于\maketitle可以发出两次 - 一次用于初始页,一次用于常规首页。

我使用了虚假的 svn 条目来展示如何处理这些条目。显然,您不会亲自输入这些条目 - 您会让 svn 根据需要完成并更新这些条目。

代码如下:

\documentclass{article}

% comment this line and uncomment the next to remove the stamp
\usepackage[draft]{prelim2e}
% \usepackage[final]{prelim2e}

% to pretty print the url
\usepackage{url}

% to reuse title, author etc. easily
\usepackage{titling}

% to handle the SVN info nicely
\usepackage[table,subgroups]{svn-multi}
  % for example only - uncomment lines below to let svn populate fields
  \svnidlong
    {$HeadURL: http://www.myfiles.com/myfiles/mainfile.tex $}
    {$LastChangedBy: somebody $}
    {$LastChangedRevision: 6897559 $}
    {$LastChangedDate: 1012-04-01 012:20:43 +0100 (Wed, 01 Apr 1012) $}
%   \svnidlong
%       {$HeadURL:  $}
%       {$LastChangedBy:  $}
%       {$LastChangedRevision:  $}
%       {$LastChangedDate:  $}
% % if you prefer a more concise format
% % \svnid{$Id:  $}
    \svnRegisterAuthor{somebody}{Some Body}

% adjust to taste
\newsavebox{\prelimtxt}
\sbox{\prelimtxt}{%
        \parbox{\textwidth}{%
                \urlstyle{sf}%
                \centering \small \textsf{Draft --- \today\ --- Revision \svnrev\ --- \svnyear--\svnmonth--\svnday\ \svnhour:\svnminute:\svnsecond}\\[1em]
                \centering \tiny \textsf{\svnkw{HeadURL}}%
                }% end parbox
        }% end sbox
\renewcommand{\PrelimText}{\usebox{\prelimtxt}}
\makeatletter
  \newcommand*{\preliminfo}{%
  \if@prelim@draft
    \maketitle
    \tableofrevisions
    \cleardoublepage
    \pagenumbering{arabic}
   \fi  
  }
\makeatother

% for example only
\usepackage{filecontents,kantlipsum}

\begin{filecontents}{subfile.tex}
  \svnidlong
    {$HeadURL: http://www.myfiles.com/myfiles/subfile.tex $}
    {$LastChangedBy: somebody $}
    {$LastChangedRevision: 6897541 $}
    {$LastChangedDate: 1012-04-01 01:20:43 +0100 (Wed, 01 Apr 1012) $}
    \kant[9]
\end{filecontents}

\title{Great paper}
\author{S.\ Body}

\begin{document}
\preliminfo
\maketitle

\kant[1-8]

\include{subfile}

\end{document} 

要排除该信息,请注释该行\usepackage[draft]{prelim2e}并取消注释\usepackage[final]{prelim2e}。然后不会包含初始页面,前两页将如下所示:

“最终”模式中的前两页

请注意,分页、分页符、页眉和页脚不受影响。唯一改变的是省略了初始页面,并且常规页脚下方的信息未排版。

调整并享受。

相关内容