auto-pst-pdf 和 \ifPDFTex 之间的问题

auto-pst-pdf 和 \ifPDFTex 之间的问题

我想要建立一个可以用 LaTex、pdfLaTeX 或 xeLateX 编译的文档。

但是在下面的代码中你可以看到它不能用 LaTeX 编译:问题似乎来自 \ifPDFTeX,因为使用 ifpdf 包中的 \ifpdf 没有任何问题。xelatex 和 pdflatex 都没有问题。

问题在于 auto-pst-pdf 和 \ifPDFTeX

怎么了 ???

谢谢

\documentclass[a4paper,11pt]{article}

\usepackage{iftex}

\ifXeTeX
  \usepackage[tuenc]{fontspec}
  \usepackage{xunicode} %à charger après fontspec
\else
  \usepackage[utf8]{inputenc} %pour linux
  \usepackage[T1]{fontenc} %lettres accentuées %problème de flou en .pdf mais pas avec cm-super
\fi

%This does not work :
\ifXeTeX\else\ifPDFTeX\usepackage{auto-pst-pdf}\fi\fi

%This works :
%\usepackage{ifpdf}
%\ifXeTeX\else\ifpdf\usepackage{auto-pst-pdf}\fi\fi

\usepackage{pstricks-add}

\begin{document}

Essai

\begin{pspicture}(0,0)(4,4)
\psline(0,0)(4,4)
\end{pspicture}

\end{document}

日志如下:

This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016) (preloaded format=latex)
 restricted \write18 enabled.
entering extended mode

<recently read> \fi 

l.14 ...\else\ifPDFTeX\usepackage{auto-pst-pdf}\fi
                                                  \fi
! Extra \fi.
l.14 ...se\ifPDFTeX\usepackage{auto-pst-pdf}\fi\fi

编辑 1:此示例的新问题:

使用 pdflatex 编译时,一些材料被放在第二页,并且“essai”单词出现了两次。

\documentclass[a4paper,11pt]{article}

\usepackage{iftex,ifpdf}

\ifXeTeX
  \usepackage[tuenc]{fontspec}
\else
  \usepackage[utf8]{inputenc}
  \usepackage[T1]{fontenc}
\fi

%Some material put on a 2nde page  :
\ifpdf\usepackage{auto-pst-pdf}\fi

%Works normalty with this :
%\usepackage{auto-pst-pdf}

\usepackage{pstricks-add}

\begin{document}

Essai

\begin{pspicture}(0,0)(4,4)
\psline(0,0)(4,4)
\end{pspicture}

\end{document}

编辑2:当不使用 ifpdf 时这里也会出现同样的问题:

\documentclass[a4paper,11pt]{article}

%without this no problem ...
\newif\ifpdf
\ifx\pdfoutput\undefined
\pdffalse % we are not running PDFLaTeX
\else
\pdfoutput=1 % we are running PDFLaTeX
\pdftrue
\fi
%%%%%%%%%%%%%

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

%\usepackage{auto-pst-pdf}
\usepackage{pst-pdf}

\usepackage{pstricks-add}

\begin{document}

Essai

\begin{pspicture}(0,0)(4,4)
\psline(0,0)(4,4)
\end{pspicture}

\end{document}

答案1

这适用于xelatexpdflatex并且latex

\documentclass[a4paper,11pt]{article}
\usepackage{iftex,ifpdf}

\ifXeTeX
  \usepackage{fontspec}
\else
  \ifpdf
    \typeout{==== pdflatex ===}%
    \usepackage{auto-pst-pdf}
  \else
    \usepackage{auto-pst-pdf}
    \pagestyle{empty}
  \fi
  \usepackage[utf8]{inputenc} %pour linux
  \usepackage[T1]{fontenc}
\fi
\usepackage{pstricks-add}
\begin{document}

    Essai

    \begin{pspicture}(0,0)(4,4)
    \psline(0,0)(4,4)
    \end{pspicture}

\end{document}

答案2

我不知道为什么,但是 \usepackage{geometry} 解决了这个问题。此示例现在也适用于 LaTeX 和 pdfLaTeX。

\documentclass[a4paper,11pt]{article}

\usepackage{ifpdf}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

%solution to the problem : 
\usepackage{geometry}

%\ifpdf %not necessary with geometry
\usepackage{auto-pst-pdf}
%\fi

\usepackage{pstricks-add}

\begin{document}

Essai

\begin{pspicture}(0,0)(4,4)
\psline(0,0)(4,4)
\end{pspicture}

\end{document}

相关内容