如何根据所使用的编译器控制 PDF 输出?

如何根据所使用的编译器控制 PDF 输出?

我有一个批处理文件,它将使用 3 个编译器依次编译相同的输入文件,如下所示。此机制用于查看每个编译器生成的 PDF 文件大小(压缩前后)。

rem ============= LaTeX =============
latex %1
dvips %1
ps2pdf %1.ps
rename %1.pdf %1-LaTeX.pdf
copy %1-LaTeX.pdf %1-LaTeX-Compressed.pdf
compress %1-LaTeX-Compressed.pdf
cleanup %1


rem ============= PdfLaTeX =============
pdflatex %1
rename %1.pdf %1-PdfLaTeX.pdf
copy %1-PdfLaTeX.pdf %1-PdfLaTeX-Compressed.pdf
compress %1-PdfLaTeX-Compressed.pdf
cleanup %1


rem ============= XeLaTeX =============
xelatex %1
rename %1.pdf %1-XeLaTeX.pdf
copy %1-XeLaTeX.pdf %1-XeLaTeX-Compressed.pdf
compress %1-XeLaTeX-Compressed.pdf
cleanup %1

当输入文件无法使用某个编译器进行编译时,就会出现问题。例如,如果输入文件包含 PSTricks 代码,则必须pdflatex跳过编译,只生成带有警告消息的 PDF 输出。“编译已中断。”. 另一个例子是输入文件导入了无法编译的 PDF 图像latex

我需要类似以下内容:

情况1

\documentclass{article}
\usepackage{ifxetex}

\ifxetex
  \begin{document}

    \end{document}
\fi

\iflatex
    \begin{document}

    \end{document}
\fi

\ifpdflatex
    \begin{document}

    \end{document}
\fi

案例 2

\documentclass{article}
\usepackage{ifxetex}

\iflatex
    \begin{document}

    \end{document}
\fi


\ifpdflatexorxelatex
    \begin{document}

    \end{document}
\fi

如何根据所使用的编译器控制 PDF 输出?

答案1

第一种情况

包含 PSTricks 代码的文档,必须使用或latex+dvips+ps2pdf运行xelatex不是pdflatex

\documentclass{article}

\newcommand{\INTERRUPT}{\shipout\hbox{Compilation interrupted}\stop}

\usepackage{etoolbox,ifpdf,ifxetex}
\ifboolexpr{ bool {pdf} } {\INTERRUPT} {}

\begin{document}

text

\end{document}

对于仅与pdflatex,交换{}{\INTERRUPT}

第二种情况

latex+dvips+ps2pdf必须使用或进行编译的文档pdflatex,但不是xelatex

\documentclass{article}

\newcommand{\INTERRUPT}{\shipout\hbox{Compilation interrupted}\stop}

\usepackage{etoolbox,ifxetex}
\ifboolexpr{ bool {xetex} } {\INTERRUPT} {}

\begin{document}

text

\end{document}

对于仅与xelatex,交换{}{\INTERRUPT}

第三种情况

pdflatex必须使用或进行编译的文档xelatex,但不是latex+dvips+ps2pdf

\documentclass{article}

\newcommand{\INTERRUPT}{\shipout\hbox{Compilation interrupted}\stop}

\usepackage{etoolbox,ifxetex}
\ifboolexpr{ bool {pdf} or bool {xetex} } {} {\INTERRUPT}

\begin{document}

text

\end{document}

对于仅与latex+dvips+ps2pdf,交换{}{\INTERRUPT}

当编译器没有通过测试时,低级\shipout操作将产生PDF(或DVI)并\stop结束运行。

相关内容