我有一个批处理文件,它将使用 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
结束运行。