是否可以将编译器标签放置在 Latex 文档中,以便一个 .tex 文档可以生成两个共享相似内容的不同文档?

是否可以将编译器标签放置在 Latex 文档中,以便一个 .tex 文档可以生成两个共享相似内容的不同文档?

我正在写一份文档,需要两个版本。

第一版给出了项目的概要和细节。它提供了方法概述、数据、结果和结论等。这些方法非常数学化/计算化,但对于管理层等来说,这是一份非常非技术性的报告。

第二个版本是第一个版本加上额外的部分,详细介绍了技术内容、算法、数学推导、命令行中使用的参数和内部软件的细节等。对于非技术报告来说,这些内容太过深入,但我个人或团队成员将来应该需要参考它并提醒自己确切的细节。

我不太想写两份文档,因为它会经常更新,而且很难跟踪两份大文档并确保它们共享相同的材料。我注意到可以告诉编译器省略 \iffalse 和 \fi 命令之间的部分。是否有类似的命令,使得两个命令之间的任何内容在给定命令行参数的情况下被省略(或包含)(我在 Linux 上)。我熟悉 bash 脚本,但不知道该怎么做?

答案1

我的快速而简单的方法是使用environ包。比如

\documentclass{article}

\newif\ifFullVersion
\FullVersiontrue% or \FullVersionfalse

\usepackage{environ}
\NewEnviron{fullversion}{\ifFullVersion\expandafter\BODY\fi}

\begin{document}

This is always here.

\begin{fullversion}
This is here only if the full version is switched on.
\end{fullversion}

This is always here either.
\end{document}

这当然意味着您需要在前言中手动声明\FullVersiontrue\FullVersionfalse。但编写一个小的 shell 脚本来添加所需的行(例如,在 之后)并不困难\begin{document}

当然,该comment软件包可以以类似的方式使用。或者甚至可以使用基本\includeonly命令来实现这一点,但是如果使用 shell 脚本方法,这可能会更加麻烦。

答案2

好的,楼主,我找到了一个可行的解决方案。这是 Neil Olver 解决方案的修改版:向文档传递参数。我使用的 bash 脚本如下:

#!/bin/bash "Make_Doc.sh"
if [ "$2" = "-F" ]
then
    echo "Full Doc Printed"
    LatexInput="\def\flagOne{1}"
else
    echo "Short Doc Printed"
    LatexInput="\def\flagTwo{1}"
fi
pdflatex "$LatexInput \input{$1.tex}"

然后在 Latex 文档中,将仅当命令行中的参数 2 为 -F (即 Make_Doc.sh foo.tex -F )时出现的所有文本放置在以下语句之间:

\ifdefined\flagOne
Text here
\fi

完整的例子如下:

\begin{document}
.
.
.
Text to appear in both documents
.
.
.
\ifdefined\flagOne
Text to appear in only in full document
\fi
.
.
.
Text to appear in both documents
.
.
.
\ifdefined\flagOne
Text to appear in only in full document
\fi
.
.
.
Text to appear in both documents
.
.
.
\end{document}

这很可能通过简单地定义更多标志来扩展以生成任意数量的不同文档版本。然而,可能存在更好的解决方案。

答案3

引入新的条件\ifsimple并使用 构造您的文本\if .. \else .. \fi

\documentclass{article}

\newif\ifsimple
\simpletrue 
\simplefalse

\author{Franz K.}

\ifsimple
    \title{The Problem With Bugs}
\else
    \title{Metamorphosis}
\fi

\begin{document}
\maketitle

One morning, as Gregor Samsa was waking up from anxious dreams, he
discovered that in his bed he had been changed into a monstrous verminous
bug. He lay on his armour-hard back and saw, as he lifted his head up a
little, his brown, arched abdomen divided up into rigid bow-like sections.

\ifsimple\else
\emph{Provide a scientific discussion here that is only intended for
experts on metamorphosis.}
\fi

\end{document}

在此处输入图片描述 在此处输入图片描述

相关内容