基于宏从一个 LaTeX 文档生成两个 PDF 文档

基于宏从一个 LaTeX 文档生成两个 PDF 文档

一位同事正在合作撰写一份提案,其中同一份提案将联合提交给不同国家的两个不同的资助机构。内容有 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}

姆韦

相关内容