从一个 tex 文件自动创建两个 PDF 输出文件

从一个 tex 文件自动创建两个 PDF 输出文件

可能重复:
一个 TeX 文件可以输出为多个 PDF 文件吗?

假设我有一个 tex 文件foo.tex。现在,我想实现 pdflatex 不仅创建一个文件foo.pdf,而且还同时创建一个与 相同的文件fooxy.pdf(!) foo.pdf。这个问题有简单的解决方案吗?

附言:

  • 是的,我可以通过复制文件管理器中的文件并重命名来实现这一点。但我希望有一个自动解决方案。
  • 不,我没有疯。请不要问我为什么我想做这个。

答案1

我想到三种方法来解决这个问题:

&&

您可以在后面添加复制命令,pdflatex如下所示:

pdflatex foo.tex && cp foo.pdf fooxy.pdf

它只需一行就可以完成您想要的所有事情,这是一个简单的解决方案。

制作

您可以通过创建如下 Makefile 使其稍微复杂一些:

namebase = foo
nameaddon = xy
tex = pdflatex          # Might wanna set this to latexmk

.PHONY : all
all : $(namebase)$(nameaddon).pdf

$(namebase)$(nameaddon).pdf : $(namebase).pdf
    cp $< $@

$(namebase).pdf : $(namebase).tex
    $(tex) $<

这在命名文件时为您提供了更大的灵活性,并且除非需要,否则它不会编译或复制。您只需发出

make all

make决定需要做什么。

球座

这确实不是这种方法行不通,但这是我首先想到的方法。该命令tee从标准输入读取数据,并写入标准输出和作为参数给出的文件。如果pdflatex要将 pdf 写入标准输出,您可以使用

pdflatex foo.tex | tee foo.pdf fooxy.pdf > /dev/null

但作为pdflatex 才不是这种方法失败了。

答案2

仅适用于 Microsoft Windows 用户。

它已经在我的日常工作中得到了适当的测试。

rem this file name is pdflatexdup.bat

rem first arg specifies the master input filename without extension
rem remaining args specifies a list of duplicate filenames

rem remove the previously created master PDF
if exist "%~1.pdf" del "%~1.pdf"

rem create master PDF
if exist "%~1.tex" pdflatex -draftmode -interaction=batchmode "%~1.tex"
if exist "%~1.tex" pdflatex -draftmode -interaction=batchmode "%~1.tex"
if exist "%~1.tex" pdflatex -draftmode -interaction=batchmode "%~1.tex"
if exist "%~1.tex" pdflatex "%~1.tex"

rem remove unnecessary files
for %%x in (aux log out toc nav snm) do (if exist "%~1.%%x" del "%~1.%%x")

rem save the master file name
set master=%~1
shift

:loop
if "%~1"=="" goto :eof
copy "%master%.pdf" "%~1.pdf" 
shift
goto :loop

rem remove the master PDF if you want 
rem if exist "%master%.pdf" del "%master%.pdf"

如何使用:

foo.tex使用在 CMD 窗口中输入以下命令来编译您的。

pdflatexdup foo a b c d e f g

其中abc、 ...g是重复的文件名。编译后,您将获得 8 个 99.99% 相同的 PDF 文件(包括主 PDF)。

如果重复的名称包含空格,则需要用引号将其括起来,如下所示:

pdflatexdup foo a b c d e f g "garbage collector"

在这种情况下,您将获得如下的 9 个 PDF 文件。

在此处输入图片描述

答案3

pdflatex -shell-escape当您以(MikTeX)形式运行 LaTeX 时,您可以在 LaTeX 内部运行 LaTeX :

\documentclass{article}
\write18{pdflatex --jobname="\jobname xy" \jobname}
\begin{document}
Hello Copy!
\end{document}

这样做的好处是第二次运行可以略有不同,例如另一种页面布局。

答案4

在 Linux 系统中的 LaTeX 中可以是:

% Need --enable-write18 or --shell-escape 
\immediate\write18{cp foo.pdf fooxy.pdf}

cp 或者,您可以调用任何其他命令(例如,多次运行 pdflatex 的脚本)来代替(复制)。

附录:在 Windows 系统中可以(未经测试):

\immediate\write18{foo.bat}

哪里foo.bat有一个带有 .bat 扩展名的简单文本文件,其中包含以下文本:

pdflatex foo.tex
copy foo.pdf fooxy.pdf
del foo.aux
del foo.log

但这没有意义,因为最简单的方法就是单独执行批处理文件:

C:\SOMEDIR> foo

相关内容