使用 LuaLaTeX 和 Toggles 输出到多个 .pdf 文档

使用 LuaLaTeX 和 Toggles 输出到多个 .pdf 文档

我有一个文档,有时我想将其打印为单个文档,有时我想将其打印为较小的页面组。我想自动化这个过程。我在 Windows 10 机器上使用 TeXmaker 和 LuaLaTeX。

我不清楚需要将哪些参数传递给 \ShellEscape 命令。我读过几篇其他帖子但它们大多是 8-9 年前的,我无法让代码运行。我不知道 TeX(或 Windows)是否发生了变化,以至于这些旧帖子中的解决方案不再有效。

这是我的 MWE(不起作用)。

% !TEX TS-program = lualatex
% !TEX encoding = UTF-8 Unicode
\documentclass[a4paper,12pt]{article}
\usepackage{shellesc}  %for creating multiple output files.
\usepackage{etoolbox}  %for use with the toggles function

\newtoggle{individualpages}
\togglefalse{individualpages}

\begin{document}
Test page 1.
\iftoggle{individualpages}{%
    And this too.   %testing code just to make sure the toggle is working.  
    \ShellEscape{lualatex --jobname="file1.pdf"}
}{} 

\newpage
Test page 2.
\iftoggle{individualpages}{%
    Dont forget me!
    \ShellEscape{lualatex --jobname="file2.pdf"}
}{} 

\end{document}

理想情况下,我会将开关切换为 false,然后它会使用我所有页面的 .tex 文档的名称编译一个 .pdf。但是,当我将开关切换为 true 时,它​​会创建 2 个单独的 .pdf 文件,分别名为“file1.pdf”和“file2.pdf”,每个文件一页,包含各自的文本。这可能吗?

答案1

您可以(滥用)使用 docstrip 文件格式来同时生成和构建所有三个输出文件。

% \iffalse
%<*internal>
\input docstrip.tex
\keepsilent\askforoverwritefalse
\nopreamble\nopostamble
\generate{
    \file{file1.tex}{\from{\jobname.dtx}{file1}}
    \file{file2.tex}{\from{\jobname.dtx}{file2}}
    \file{all.tex}{\from{\jobname.dtx}{all}}
}
\immediate\write18{lualatex file1.tex}
\immediate\write18{lualatex file2.tex}
\immediate\write18{lualatex all.tex}
\endbatchfile
%</internal>
%<*all|file1|file2>
\documentclass[a4paper,12pt]{article}
\begin{document}
%</all|file1|file2>
%<*all|file1>
Test page 1.
%</all|file1>
%<*file1>
And this too.
%</file1>
%<*all>
\newpage
%</all>
%<*all|file2>
Test page 2.
%</all|file2>
%<*file2>
Dont forget me!
%</file2>
%<*all|file1|file2>
\end{document}
%</all|file1|file2>
% \fi

这将生成三个单独的.tex文件:所有内容、file1 的内容和 file2 的内容(部分\generate{...}),并使用 LuaLaTeX 将这些文件编译为 pdf 文档(\immediate\write18部分)。表单的注释%<selector>开始您想要作为单独文件的部分,并以类​​似的方式%</selector>结束该部分。您将从此 CTAN 教程中找到有关 docstrip 文件格式的更多信息https://ctan.org/pkg/dtxtut

为了调用lualatex来构建生成的.tex文件,您需要在构建时启用 shell 转义。从命令行可以调用tex --shell-escape <filename>.dtx。我无法访问 Windows 计算机,因此无法帮助在 MikTeX 上启用 shell 转义,但也许可以遵循如何在 MikTeX 安装中启用写入 18有帮助。

all.pdf

全部

file1.pdf

文件1

file2.pdf

文件2

答案2

此答案不会同时生成两个单独的文件,但在定义输出到两个或多个文件方面具有灵活性。它使用包\includecomment的功能comment来识别应输出到每个文件的内容。

这涉及:

  1. 创建一个新的条件,这里是\ifkeep,并定义\ifkeep是真还是假。例如\keeptrue
  2. 用于定义 if else 测试,以确定在为真或为假\ifkeep时要执行的操作。\ifkeep
  3. 将代码放置在\begin{keep} \end{keep}环境之外的所有文档中。
  4. \begin{keep} \end{keep}根据以下值将代码放置在文档子集之间\ifkeep

输出\keeptrue为:

在此处输入图片描述

结果\keepfalse仅为Test page 1And this too且省略了图像。

version包具有类似的功能。pdfscreen利用此功能可以以文章格式输出内容或以幻灯片的形式在屏幕上演示。

\documentclass[a4paper,12pt]{article}
\usepackage{graphicx}
\usepackage{comment}

% Toggle "keep" to determine if output is retained or discarded
\newif\ifkeep
%\keeptrue
\keepfalse

% If \ifkeep true, retain the code in the \begin{keep} environment, otherwise discard
\ifkeep
  \includecomment{keep}
\else
  \excludecomment{keep}
\fi

\begin{document}

Test page 1.

\begin{keep}
And this too.

\centering\includegraphics[width=0.6\linewidth]{example-image-a}
\end{keep}

\end{document} 

相关内容