我想跟踪文档的修订,并且基本上对所有事情都使用版本控制软件(顺便说一下,SVN,单调增加的修订号本身就是其奖励)。
我想添加 SVN 标签,例如$Id$
,SVN 会用修订 ID 替换此标签(如果设置了该属性)。如果能以某种方式显示此标签,我会很高兴,这样我就可以更轻松地跟踪事情。理想情况下,我希望将此信息放在标题下方,即组成文档的文件列表(这些 ID 的列表)
如果有帮助的话,我正在使用子文件来允许它跨越多个 tex 文件。
我希望有一种简单/可行的方法来做到这一点。
然后我想以某种方式编译该文档并且不显示任何这些信息。
我对 LaTeX 预处理器进行了一些搜索(因此,例如,如果我想要这个信息,我可以定义一个常量),但随后我必须搜索在前端显示的信息(可以做到,内容页面证明了这一点)并将它们全部拼接在一起。
我怀疑我是不是第一个想这么做的人,所以,与其重新发明轮子,我还是问你们吧。
答案1
你试过问搜索引擎吗?第一个链接提到svn-multi
,它可以完全实现您想要实现的功能。
您可以通过将其添加到您的文档来从您的存储库中获取信息。
\svnidlong
{$HeadURL$}
{$LastChangedDate$}
{$LastChangedRevision$}
{$LastChangedBy$}
将 设置为svn:keywords
后HeadURL 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 特有的。它不会更改页面布局。很容易关闭。它不会干扰已配置的页眉/页脚。我添加了一个命令来打印包含标题、作者等的初始页面,以及用于生成文档的所有文件的修订信息表。
以下是启用了邮票并包含初步页面的前两页示例:
这利用了几个包。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}
。然后不会包含初始页面,前两页将如下所示:
请注意,分页、分页符、页眉和页脚不受影响。唯一改变的是省略了初始页面,并且常规页脚下方的信息未排版。
调整并享受。