如何自动化生成文档多个版本的工作流程?

如何自动化生成文档多个版本的工作流程?

假设您有同一个 LaTeX 文档的两个版本。

在此处输入图片描述

例如,您有一个用于实际授课的讲座幻灯片版本:由于您并不是“大段文字”的忠实粉丝,因此该版本在文本内容方面会非常简洁,让观众可以聆听您正在讲的内容,而不必阅读幻灯片,并将图形内容放在中心位置。

讲座结束后,向听众提供另一个版本的幻灯片,供其自学,该版本将更加独立,并包含您在讲座中所说的内容的摘要以及上面提到的图形内容。

考虑一下,您可以通过更改类选项或更改输入文件中某个专用计数器的值来在两个版本之间切换;“手动”完成这项工作相对简单。

为了制作同一文档的两个不同版本,我当前的工作流程是

  1. “手动”编译第一个版本,
  2. 更改生成的输出的文件名(以防止在步骤 4 中覆盖)
  3. 对输入文件进行适当的更改以切换到第二个版本,
  4. “手动”编译第二个版本。

但是,这种工作流程繁琐且容易出错,尤其是当不同版本的数量增加时。我想尽可能地实现自动化。有没有办法批量编译我文档的所有版本,每个版本都有不同的输出文件名?

我猜想这将涉及在命令行修改输入文件(我在 Mac OS X 上),但我不知道如何做到这一点。

您是否有自动化的工作流程来编译同一篇文档的多个版本?您是如何做到的?

编辑:我想通了使用Martin Scharrer 的帖子Neil Olver 的帖子向文档传递参数,其中我的问题是重复的。

答案1

考虑一下,您可以通过更改类选项或更改输入文件中某个专用计数器的值来在两个版本之间切换;“手动”完成这项工作相对简单。

您是否有自动化的工作流程来编译同一篇文档的多个版本?您是如何做到的?

准备三个文件:

  • acontents.tex文件包含文档的大部分内容,\begin{document}以及和之间的所有内容\end{document}

  • 包含lecture.tex您用来制作适合讲座的版本的序言,并以片段阅读结尾contents.tex

  • 包含study.tex您用来制作适合学习的版本的序言,并以片段阅读结尾contents.tex

片段contents.tex如下

\begin{document}
\input{contents}
\end{document}

lecture.tex然后,您可以通过处理或study.tex仅编辑轻松地准备文档的两个版本contents.tex

lecture.tex如果和之间共享了一个较大的前言片段,study.tex那么您也应该考虑将其移动到单独的文件中,并将\input其放在相应的文件前言中。

笔记:如果您对文件处理本身的自动化感兴趣并愿意使用 shell 方法,您可以学习bsdmake(1)。我编写了宏,bsdmake(1)您可以使用它来自动化文件处理,这可能会让您感兴趣。它们是免费软件,可用于许多现代类 Unix 操作系统。Mac OS X MacPorts、FreeBSD 和 Debian 的端口或打包程序已经存在。请参阅生成 LaTeX 文档

答案2

您可能能够使用并调整以下内容,以模拟如何根据编译时给出的 2 个条件生成 2 个 PDF 输出。代码说明了详细信息。

% compile with pdflatex -shell-escape

\documentclass[preview,border=12pt]{standalone}
\usepackage{filecontents}

\begin{filecontents*}{template.tex}
\documentclass[preview,border=12pt]{standalone}
\newif\ifsecret
\begin{document}
common 1

\ifsecret
I have a top secret message here.
\fi

common 2
\end{document}
\end{filecontents*}

\usepackage{graphicx}

\begin{document}
\immediate\write18{\unexpanded{pdflatex -jobname=secret-included "\AtBeginDocument{\secrettrue} \input{template}"}}
\immediate\write18{\unexpanded{pdflatex -jobname=secret-excluded "\AtBeginDocument{\secretfalse} \input{template}"}}
Done, secret-included.pdf and secret-excluded.pdf have been generated!

\fbox{\includegraphics[width=.5\linewidth]{secret-included}}%
\fbox{\includegraphics[width=.5\linewidth]{secret-excluded}}
\end{document}

在此处输入图片描述

有关的

答案3

除了beamer演示模式幻灯片有两种模式,可能正是你想要的

  • 讲义模式对于看起来像幻灯片加注释的讲义(IIRC)
  • 文章模式对于讲义来说,它们有点像纸张

您可以在一个文档中混合这些模式,然后制作不同版本的演讲。

请参阅投影机用户指南中的“创建支持材料”。

然而,我从未使用过这些支持材料模式,尽管我经常处理类似的情况:

  • 有一份很长的报告,包含大量内部信息
  • 待发表论文
  • 演示幻灯片,可能还有
  • 还有一张海报。

我的情况和你的不同之处可能在于:

  • 如果你的授课相当于教授一门课程,那么 beamer 概念可能就是你正在寻找的。
  • 我通常所做的讲座都是在研究项目背景下进行的(即使是教学讲座:“双线性模型简介”)。这意味着我的讲座幻灯片是一份在讲座结束后不再更改的文档。我可能会回去复制一些幻灯片以供以后进行另一次演讲,或者从之前的其他演讲中衍生出新的演讲,但我的讲座并不是关于完全相同主题的一系列不断发展的讲座(就像每年教授 $\LaTeX$ 101 一样)。

我的经验是,虽然报告、论文、演示幻灯片和海报似乎虽然它们几乎相同,但它们仍然有很大差异,不能将它们视为一个文档的版本。通常,甚至报告和论文也不足以被视为一个文档。

我经常和斯维夫/针织品这是数据分析中生成报告的技术,其中结果会自动包含在 $\LaTeX$ 文档中。
在这种情况下,长内部版本和短公开版本之间的区别在于内部版本在 pdf 中显示所有代码。在文档编译过程中,可以通过一个参数轻松切换。

对于其他所有事情,我尝试将通用部分(通常是数据分析代码,包括生成图形的代码)放入一个通用文件中,然后将其输入到不同的文档中。除此之外,演示文稿与长文本有很大不同,对我来说它们是完全不同的文档。而且,正如我上面所解释的那样,随着项目的发展,每个文档(可能除了报告)在某个时候都会是“最终的”,此后不会更改。


完全不同类型的同一篇论文的两个版本例行公事使用适合期刊提交且可读格式的手稿。

这两个版本通常仅在一般格式方面有所不同:

  • 一列与两列
  • 正文中的表格和图片,而不是放在文末
  • 行间距
  • 提交版本的图表清单
  • 最终的手稿版本(例如在项目页面或 arxiv 上下载)会显示一个框,说明
    • 此文档可在 [project page/arxiv/...] 上找到,
    • 与官方论文相比没有变化(或者纠正了一些错别字),
    • 其发布为[出版物参考]和链接,以及
    • 可能是期刊要求作者手稿中出现的句子。

final我为此使用了 class 选项:

\documentclass[final]{article}
\makeatletter
\newif\iffinal
\@ifclasswith{article}{final}{
  \typeout{FINAL}\finaltrue}{
  \typeout{DRAFT}\finalfalse}
\makeatother

\begin{document}
\iffinal
  \textbf{\fbox{This is the author's manuscript.}}
\fi

blabla
\end{document}

答案4

我使用以下方法来包含或不包含简历的各个部分。每个部分都在一个单独的 .tex 文件中,我有一个主文件,用于加载etoolbox.sty\usepackage{etoolbox}每个部分都有并且

\newtoggle{<section>}
\settoggle{<section>}{true}

在序言中。

在我的身体里

\iftoggle{<section>}{\input{section.tex}}{}

将开关更改为 false 将导致该部分不被包含。

相关内容