测试是否可以加载具有给定选项的包

测试是否可以加载具有给定选项的包

我需要在序言中引入一个条件结构,如果安装了完整版本,则加载包;如果存在,则加载其精简版本;否则加载某个标准包。需要这样做是因为我必须将代码转发给其他人,但我不知道她的 latex 安装的规格。包是mtpro2,可以使用或不使用“精简”选项加载(“精简”是免费的,完整版不是)。

检查包是否存在很简单(使用\IfFileExists)。检查包是否加载了某个属性集也很简单(使用ifpackagewith)。但是我如何检查包是安装完整版还是精简版?

我当前的结构尝试了一种解决方法,即检查一些仅在完整版中可用的字体。但奇怪的是,这似乎不能正常工作。无论如何,这种方法不能扩展到其他软件包,因此我认为我的问题在更一般的情况下很有价值。

\IfFileExists{mtpro2.sty}{%this checks whether mtpro2 is installed
\IfFileExists{umt2hrb.fd}{%check whether there is this font: if the font is present, then full version is installed
    \usepackage[noamssymbols,slantedGreek,zswash,mtpscr]{mtpro2}
    }{%
    \usepackage[lite,noamssymbols,slantedGreek,zswash]{mtpro2}
    }%
}{%otherwise, load standard packages
\usepackage[cmintegrals]{newtxmath}
}%

谢谢您的帮助。希望对其他人也有用。

答案1

测试 fd 文件是没用的:它无论如何都存在,而且它只包含字体定义,而不是字体本身。您需要测试特定于完整版本的 tfm 和/或 pfb 字体。启用管道后,您可以执行类似以下操作(请参阅首先在 texmf 树中搜索文件):

\documentclass{article}
\pdfmapfile{=mtpro2.map}
\usepackage{etoolbox}
\newbool{fontexists}

\newread\mypipe
\openin\mypipe="|kpsewhich mt2syat.tfm"
\ifeof\mypipe
\else
  \begingroup
  \endlinechar=-1
  \read\mypipe to \x  
  \ifdefempty{\x}
  {\global\boolfalse{fontexists}}
  {\global\booltrue{fontexists}}
  \endgroup
\fi  
\ifbool{fontexists}
   {\usepackage[noamssymbols,slantedGreek,zswash,mtpscr]{mtpro2}}
   {\usepackage[lite,noamssymbols,slantedGreek,zswash]{mtpro2}}

\begin{document}
a $a=b$

\end{document}

相关内容