制作文档的不同版本

制作文档的不同版本

我正在为一个软件环境编写文档,该文档由使用命令组合在一起的几个子文件组成\include

问题是,我希望能够输出文件的不同版本,以便我可以为不同类型的读者打印它,而无需实际修改整个文档。

例如,我希望能够为程序员生成一个版本的文件,为风险分析师生成另一个版本的文件,为数据库管理员生成另一个版本的文件,每个版本都可以访问不同的部分。

我知道我可以创建多个 tex 文件,每个文件都包含正确的子部分,但我想我在某处看到了一种在编译时使用参数来执行此操作的方法。

无论如何,我正在寻找建议。

编辑:

如果可能的话,我希望为每种类型的读者创建的文档看起来都是完整的(正确的章节编号等......)

答案1

如果只有 d 文件的版本不同\include,你可以在序言中添加类似

\newcommand\programmers{\includeonly{chap1,chap3}}
\newcommand\riskanalyst{\includeonly{chap1,chap4}}
\newcommand\DBadmin{\includeonly{chap1,chap2}}

编译整个文档,确保每个引用都是正确的。为了生成“程序员版本”,请pdflatex调用

pdflatex "\nofiles\AtBeginDocument{\programmers}\input{doc.tex}"

(假设您的主文档是doc.tex)。其他类别也类似。用于\nofiles避免破坏已经完成的.aux文件。

这种方法有局限性:例如,页码反映了被省略的章节的存在。

与 comment 包的不同实现

\documentclass{article}
\usepackage{comment}
\includecomment{1}\includecomment{2}\includecomment{3}\includecomment{4}
\newcommand\programmers{%
  \includecomment{1}\excludecomment{2}\excludecomment{3}\includecomment{4}}
\newcommand\riskanalyst{%
  \includecomment{1}\excludecomment{2}\includecomment{3}\excludecomment{4}}
\newcommand\DBadmin{%
  \includecomment{1}\includecomment{2}\excludecomment{3}\excludecomment{4}}

\begin{document}

\begin{1}
\input{chap1}
\end{1}
\begin{2}
\input{chap2}
\end{2}
\begin{3}
\input{chap3}
\end{3}
\begin{4}
\input{chap4}
\end{4}
\end{document}

加载后的第一行评论将定义环境。和以前一样,您可以通过在命令行中输入以下命令来生成“程序员”版本

pdflatex "\AtBeginDocument{\programmers}\input{doc.tex}"

其他版本也类似。这将重新编号章节和页面。如果您不想破坏辅助文件,可以指定不同的作业名称:

pdflatex --jobname=doc-programmers "\AtBeginDocument{\programmers}\input{doc.tex}"

答案2

我更喜欢在实际包含章节时决定是否包含该章节。例如:

\include{chapA}
\ifdefined\programmers
    \include{chapB}
\fi
\ifdefined\riskanalyst
    \include{chapC}
\fi
\ifdefined\DBadmin
    \include{chapD}
\fi

您可以使用根据这个问题,有更多条件。, 和在此问题中可以找到有关向文档传递参数的选项。

答案3

值得注意的是,另一种方法是将文档保存为 XML,您可以定义(或使用现有)机制来执行您所描述的操作。输出依赖项称为有效性,DocBook 等 XML 词汇表具有明确的功能来处理它们。可以使用 XSLT 从 XML 转换为 LaTeX,因此您可以从单个主文档创建无限的多种并行输出格式。

缺点是你必须学会​​如何做,找到一个好的 XML 编辑器,并学习如何编写 XSLT 来生成 LaTeX 输出。如果你有一个非常大的项目,或者你已经熟悉基础知识,或者涉及资金,那么这是值得的 :-)

答案4

标签可能对这种用例有用,幸运的是,有一个名为 LaTeX 包(现在,v1.0 来自 2011 年 8 月)标记为此。请查看以下小示例。

主要.tex:

\documentclass{article}
\usepackage{tagging}

\begin{document}

\tagged{programmers}{Include programmers section}

\tagged{riskanalyst}{Include riskanalyst section}

\tagged{DBadmin}{Include DBadmin section}

\end{document}

生成文件:

LATEX_COMPILER := pdflatex

.PHONY: all
all: Manual_programmers.pdf Manual_programmers.pdf Manual_DBadmin.pdf

Manual_programmers.pdf:
    $(LATEX_COMPILER) --jobname="$(basename $@)" "\AtBeginDocument{\usetag{programmers}}\input{main}"

Manual_riskanalyst.pdf:
    $(LATEX_COMPILER) --jobname="$(basename $@)" "\AtBeginDocument{\usetag{riskanalyst}}\input{main}"

Manual_DBadmin.pdf:
    $(LATEX_COMPILER) --jobname="$(basename $@)" "\AtBeginDocument{\usetag{DBadmin}}\input{main}"

相关内容