如何检测一个包是否支持某个选项?

如何检测一个包是否支持某个选项?

我正在开发一个定制的报告类,旨在为我们公司编写技术文档。除了其他花哨的功能外,我最好使用lmodern带有“”选项的“ lighttt”包。这个问题源于我们将这个类与

\usepackage[lighttt]{lmodern}

不仅在现代操作系统(如 Ubuntu 16.04)下,而且在 SLES11sp2 下也是如此。后者使用“ lmodern 2007/01/14 v1.3”,而它还没有“ lighttt”选项。因此我收到错误并且处理停止...

我也试过

\PassOptionsToPackage{lighttt}{lmodern}
\usepackage{lmodern}

但又报错。

在 LaTeX 中,如何表达“请使用软件包lmodern 选项lighttt。但如果没有,加载裸lmodern包也可以。”?

在伪代码中这可能看起来像:

\ifpackagehasoption{lmodern}{lighttt}{%
  \usepackage[lighttt]{lmodern}}{% preferred
  \usepackage{lmodern}}% fallback

谷歌搜索“latex load packageoptional”和“latex check quality of package although a option is not available”并没有带来任何有用的结果。

SLES11sp2 系统的一些版本号:

pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6)
LaTeX2e <2005/12/01>

不,更新系统不是一个选项......;)并且无论如何也无法回答实际问题。

答案1

我只看到检查 texliveversion 并加载软件包的解决方案

一个例子:

\def\gettexliveversion#1(#2 #3 #4#5#6#7#8)#9\relax{#4#5#6#7}
\edef\texliveversion{\expandafter\gettexliveversion\pdftexbanner\relax}

\ifnum\texliveversion >2010
\RequirePackage[svgnames]{xcolor}
\else
\RequirePackage{xcolor}
\fi

\documentclass[12pt]{report}
\begin{document}

text  \color{Red} sfgsd


\end{document}

如果您知道 texlive 版本,您可能知道您“传递”的选项是否有效......

代码也可以改为读取月份和日期......

但是你必须知道 texlive 版本中使用了哪个版本的包。

来源:在 pdflatex 中获取 Texlive 版本?

答案2

根据@UlrikeFischer 的建议,这是我想到的解决方案,目前正在成功使用:

%
% Adding the lighttt option to the global list of class options
%
\ifx\@empty\@classoptionslist
  \g@addto@macro\@classoptionslist{lighttt}
\else
  \g@addto@macro\@classoptionslist{,lighttt}
\fi
% Now we can pull in the lmodern package, it will skip the `lighttt` option if
% it is unknown...
\usepackage{lmodern}

相关内容