我正在尝试用 LaTeX 编写公司手册。我以前做过报告,但这份手册有点不同。
它必须跟踪小节的修订状态。其理念是每个小节都有自己的修订状态。修订状态列在小节标题后的一行中。然后在前言中生成一个包含小节编号、修订编号和修订日期的表格。
我的第一个想法是,这与目录并没有什么不同,也许 TOC 宏可以根据我的需要进行调整?
答案1
这只是一个开始。很多事情都可以改变和改进。但这很大程度上取决于你想如何跟踪修订以及你为手册使用了哪些类和包。
此处的修订和日期是手动设置的,这当然会很麻烦,特别是如果您需要进行整体修订时。有两个宏\setrevision
和\printrevision
。第一个设置修订、日期和名称(表示最后修改子节的人的姓名)。第二个打印信息并将其写入文件\jobname.lor
。这些命令可以轻松组合成一个,但我故意使用了两个,以便更容易将其适应支持某些修订控制系统的某些软件包(下面的示例)。
可以使用 插入修订列表\listofrevisions
,其中包含小节编号、名称、日期和修订。它与 配合使用hyperref
,因此小节编号是小节的链接。
以下是代码:
\documentclass[a4paper]{scrbook}
\usepackage{xcolor}
\usepackage[colorlinks,linkcolor=blue]{hyperref}
\makeatletter
\newcommand*{\curr@revision}{}
\newcommand*{\curr@date}{}
\newcommand*{\curr@author}{}
% #1: revison
% #2: date
% #3: author (last modified by)
\newcommand*{\setrevision}[3]{%
\def\curr@revision{#1}%
\def\curr@date{#2}%
\def\curr@author{#3}%
}
\newcommand*{\printrevision}{%
\begingroup
\ifnum\c@section=0\relax
\let\the@sec@number\thechapter
\else
\ifnum\c@subsection=0\relax
\let\the@sec@number\thesection
\else
\let\the@sec@number\thesubsection
\fi
\fi
\addtocontents{lor}{\protect\revisionline{\the@sec@number}{\curr@revision}{\curr@date}{\curr@author}{\@currentHref}}%
\parfillskip0pt\color{gray}
last modified by: \textit{\curr@author}\dotfill
date: \textsf{\curr@date}\quad
revision: \textsf{\hbox to 2em{\hfill \curr@revision}}%
\par\endgroup\noindent
}
\newcommand*{\listofrevisions}{%
\chapter*{Revisions\@mkboth{Revisions}{Revisions}}%
\@starttoc{lor}%
}
\newcommand*{\revisionline}[5]{%
\ifx\\#5\\%
\@revisionline{#1}{#2}{#3}{#4}%
\else
\ifcase\Hy@linktoc % none
\@revisionline{#1}{#2}{#3}{#4}%
\or % (section) section number
\@revisionline{%
\hyper@linkstart{link}{#5}{#1}\hyper@linkend
}{#2}{#3}{#4}%
\or % (page) revision number
\@revisionline{#1}{%
\hyper@linkstart{link}{#5}{#2}\hyper@linkend
}{#3}{#4}%
\else % all
\@revisionline{%
\hyper@linkstart{link}{#5}{#1}\hyper@linkend
}{%
\hyper@linkstart{link}{#5}{#2}\hyper@linkend
}{%
\hyper@linkstart{link}{#5}{#3}\hyper@linkend
}{%
\hyper@linkstart{link}{#5}{#4}\hyper@linkend
}%
\fi
\fi
}
\newcommand*{\@revisionline}[4]{%
\noindent\parskip\z@\hbox to 3em{#1}\dotfill
\textit{#4}\quad\textsf{#3}\quad\hbox to 2em{\hfill#2}\par
}
\makeatother
\begin{document}
\frontmatter
\begin{titlepage}
\centering
{\Huge The big Company Manual}
\vspace{1cm}
{\Large The inner workings of some big company}
\vspace{2cm}
\begin{tabular}{ll}
Authors & Harry Bigboss\\
& Ruth Cando\\
& Amelia Nicecode
\end{tabular}
\end{titlepage}
\tableofcontents
\listofrevisions
\mainmatter
\chapter{Overview}
\section{Status of this Manual}
\subsection{Usage}
\label{sec:usage}
\setrevision{123}{2018-06-10}{Harry Bigboss}
\printrevision
This manual is for internal use only. It must never leave the company.
Those who take it out, will be fired.
\subsection{Completeness}
\setrevision{55}{2018-06-11}{Ruth Cando}
\printrevision
This manual is in a pre-release state. We are still negotiating with Harry about
the contents of \autoref{sec:usage}.
\section{Goals of the Manual}
\subsection{Introduction}
\setrevision{783}{2018-06-10}{Amelia Nicecode}
\printrevision
The manual can be used as an introduction to the procedures used in this company.
\subsection{Reference}
\setrevision{2233}{2018-06-12}{Amelia Nicecode}
\printrevision
The manual is intended to be a reference of the companies internal procedures.
\end{document}
结果如下:
版本控制系统:
如果您想使用修订控制系统(我强烈推荐),您必须将每个小节放入其自己的文件中,以便获得各个小节的修订。
有一些有用的软件包,至少对于 subversion 和 git 来说是这样。如果你想使用 subversion,有一个软件包svn-multi
,它支持获取单个文件、文件组和整个文档的修订版本。
免责声明:我从未使用过此软件包,因此这直接来自手册。如果我有错误,请大家随时纠正我。
在上面的代码中,您必须用 替换,例如\setrevision
。\svnid{$Id$}
然后在 中,\printrevision
您必须用、和替换。该包还有一个(比`\listofrevisions 复杂得多),但它给出的是文件名,而不是子节编号。\curr@revision
\curr@date
\curr@author
\svnfilerev
\svnfiledate
\svnfileauthor
svn-multi
\tableofrevisions
工作流程如下:编辑手册,完成后提交文件。 Subversion 随后会在更改的文件中插入/更改修订信息。 之后,您必须再次编译手册,以确保修订号正确。