一位同事正在合作撰写一份提案,其中同一份提案将联合提交给不同国家的两个不同的资助机构。内容有 70% 重叠,但即使是相同部分的精确格式也不同(字体、列等),并且有条件地纳入某些部分。
\input
因此,这不能简单地通过使用条件和命令来实现\include
,因为文件内的标记需要区别对待。此外,仅仅编写两个独立的文档并不是正确的解决方案,因为重叠很大,而且您总是会遇到一致性问题。beamer
有一个名为的包beameraudience
,允许您根据单个开关的变化微调输出。这个包(或更适合文章类文档的包)可以用于上述应用程序吗?
他们并不打算在一次编译中创建两个不同的 PDF 文档(虽然这可能是理想的,但不建议,因为\write18
有潜在的危险)但是否可以根据开关的值有条件地包含/格式化内容?
答案1
我的理念是 KISS 原则“保持简单,s***”,在这个观点下,最好的是两个布局的两个文档,带有一个共同的注释和所有可能输入的列表:
% \input{foo}
% \input{bar}
% \input{whatever}
可以选择性地激活或停用,只需删除或添加一个%
。
话虽如此,用条件语句把所有内容都弄乱在一个文件中是没有问题的。在这个 MWE 中,你只需要在第 8 行或第 9 行之间进行选择,就可以获得两个在格式和内容上截然不同的文档:
\documentclass{article}
\usepackage{lipsum}
\newif\ifpropA
\newif\ifpropB
% choose:
% \propAtrue\propBfalse % for proposal A
\propAfalse\propBtrue % for proposal B
\ifpropA
\parskip0pt \parindent2em \twocolumn
\usepackage[scaled]{helvet}
\renewcommand\familydefault{\sfdefault} \fi
\ifpropB \parskip1em \parindent0pt \onecolumn
\usepackage{dejavu}
\usepackage{xcolor}\color{blue}
\fi
\begin{document}
\section*{A common title} This is a common part.
\ifpropA This is the proposal \fbox{A}. \lipsum[1-10] \fi
\ifpropB This is the proposal \fbox{B}. \lipsum[11-20] \fi
\end{document}