如何编写一个 LaTeX 命令以便区分是否使用 pdfLaTeX 调用它以使用 PSTricks?

如何编写一个 LaTeX 命令以便区分是否使用 pdfLaTeX 调用它以使用 PSTricks?

我正在为 LaTeX 编写一个类,我需要使它通用。我想在类中包含一个简单的图像,一个徽标,它将作为一个简单的命令插入到文档中\insertCompanyLogo。为了避免额外的文件,我在文件中添加了徽标的 PostScript 定义.sty

% Include PSTricks package
\usepackage{pstricks}
% Create new command to insert logo
\newcommand{\insertCompanyLogo}{
  \psset{xunit=.5pt,yunit=.5pt,runit=.5pt}
  \begin{pspicture}(180,180)
     \psline(0,0)(180,180) %The actual image is far more complex
  \end{pspicture}
}

当我使用 编译文档时,此方法运行良好latex <filename>。但是,当我尝试使用 时,它失败了pdflatex

为了将 PSTricks 与 一起使用pdflatex,需要进行一些修改。例如,我可以在.sty文件中添加\usepackage[pdf]{pstricks}

然后使用 编译文档pdflatex -shell-escape <filename>。但这不是通用的,使用常规命令不起作用latex

我的问题是:有没有办法定义一个命令来识别文档是否使用pdflatex或进行编译latex?这样我就可以在 PSTricks 的包含行中添加几个。因此,使用此类并调用\ifthenelse{}{}{}的文档可以使用这两个命令进行编译而无需任何修改。.sty\insertCompanyLogo

我希望我说得足够清楚。一如既往,任何解决方案、提示、建议或解决方法都是非常受欢迎的。

编辑:忘了说了,我认为像xelatexasymptote这样的软件包可以让这一切变得更容易。但我希望它能与标准的 TexLive 或 MiKTeX 安装一起使用,这可能是 95% 的此类用户都会安装的

编辑 2:这个问题被标记为重复。其他问题解决了引擎问题(pdflatex 与 latex)。有用的信息。但他们忽略了 PSTricks 部分,以及如何使其使用灵活且多引擎,这就是我提出这个问题的原因。

编辑 3:最后,我选择了一个完全不同的解决方案。我想要的是放置一个带有宏的徽标,该宏适用于两个引擎,latex并且pdflatex。我使用了TiKz

\documentclass{article}
% Include package TiKz
\includepackage{tikz}
% Create new command to insert logo
\newcommand{\insertCompanyLogo}{
  \begin{tikzpicture}
    \draw[thick,rounded corners=8pt] (0,0) -- (0,2) -- (1,3.25) 
    -- (2,2) -- (2,0) -- (0,2) -- (2,2) -- (0,0) -- (2,0);
  \end{tikzpicture}
}
\begin{document}
\insertCompanyLogo
\end{document}

实际的徽标和环境内容tikzpicture都是我从 Inkscape 中获取的,并使用扩展程序来导出TiKz格式。

答案1

这有点棘手,因为不能\ifpdf与允许 PSTricks 代码一起使用xelatex。以下示例适用于latex、、和:pdflatexxelatexlualatex

\documentclass{article}
\usepackage{ifpdf}
\providecommand\insertCompanyLogo{}
\newif\ifPSTricks \PSTrickstrue
\usepackage{ifxetex}
\ifpdf
  \PSTricksfalse
  \ifxetex\PSTrickstrue\fi
\fi

\ifPSTricks
  % Include PSTricks package
  \usepackage{pstricks}
  % Create new command to insert logo
  \renewcommand\insertCompanyLogo{%
    \psset{xunit=.5pt,yunit=.5pt,runit=.5pt}
    \begin{pspicture}(180,180)
       \psline(0,0)(180,180) %The actual image is far more complex
    \end{pspicture}}
\fi

\begin{document}

PSTricks code is \ifPSTricks\else not \fi possible: \insertCompanyLogo 

\end{document}

相关内容