On 2011-02-03, Jean-Marc Lasgouttes wrote: > Le 03/02/2011 12:11, Jürgen Spitzmüller a écrit : >> Jean-Marc Lasgouttes wrote:
>>> And a check for luatex version? This one can be done in configure.py in >>> a safe way. >> I don't think it's a matter of the luatex version. The fontspec >> version is at issue here. > OK, another possibility is extend checkLatex in configure.py to > explicitely check this luatex/fontspec combo. Checking a LaTeX package version can be done in configure.py. I suppose checking for packages is done with LaTeX currently, because this way it is easier to get what LaTeX will get. However, checking the package version or release date without loading in LaTeX is tricky. This is why I propose to use Python and kpathsea for this task. I asked at de.comp.text.tex and got the appended example from Heiko Oberdieck with some warnigns. It uses a dummy documentclass and \begin- \end{document} to circumvent the problem with \@onlypreamble. Günter % Newsgroups: de.comp.text.tex % Subject: Re: Paketdatum testen ohne Paket zu laden % References: <iif7jo$7v0$1...@online.de<4d4b36b0$0$6875$9b4e6...@newsspool2.arcor-online.net> <iifqjh$nv8$1...@news.eternal-september.org> % Followup-To: % % On 2011-02-04, Heiko Oberdiek wrote: % Philipp Stephani <lookin...@arcor.de> wrote: % % >Guenter Milde <mi...@users.berlios.de> writes: % % >> Liebe TeXperts, % >> % >> wenn ich sicherstellen möchte, daß ein Paket neuer als ein Stichtag % >> ist, kann ich das beim Laden einfach mit der optionalen Datumsangabe, % >> z. B. % >> % >> \RequirePackage{ifthen}[1994/06/01] % >> % >> Kann ich diesen Test durchführen, ohne das Paket zu laden, z.B. % >> % >> \usepackage{ifthen} % >> \newcommand*{\isPackageLater[2]}{ ???? % >> } % >> \ifthenelse{\isPackageLater{fontspec}{2010/01/01}} % >> {\message later} % >> {\message earlier} % % >Du könntest das Laden unterbinden, indem du nach dem Einlesen von % >\ProvidesPackage sofort abbrichst. Das ist sehr fragil, weil es % >annimmt, dass das Paket auch tatsächlich \ProvidesPackage verwendet, und % >zwar bevor es globale Einstellungen verändert hat. % % Oder das Paket fordert ein \NeedsTeXFormat{LaTeX2e}[...] % mit einer Versionsangabe "...", die das installierte LaTeX % überfordert. % % Die folgende Variante lädt das Paket in ein Makro % und sucht darin nach dem String "\ProvidesPackage{<Paketname>}[", % wobei <Paketname> der entsprechende Paketname aus \IsPackageLater % ist. Die folgenden Tokens bis zu "]" werden dann als Versionsangabe % interpretiert. % % Aber auch das ist nicht narrensicher: % * \outer-Makros (das einzige von latex.ltx ist zumindest entschärft) % * Zusammengebastelte \ProvidesPackage-Statements, z.B.: % \def\@package{foobar}% % \def\@filedate{2010/02/04}% % \ProvidesPackag{\@package}[\@filedate] % Häufig kommt \filedate und \filename vor. \documentclass{article} \usepackage{catchfile} \makeatletter \newcommand*{\IsPackageLater}[2]{% \@ifpackageloaded{#1}{% \@ifpackagelater{#1}{#2}% }{% \IfFileExists{#1.sty}{% \IPL@IsPackageLater{#1}{#2}% }{% \@secondoftwo }% }% } \edef\IPL@RestoreCatcodes{% \catcode`\noexpand\$=\the\catcode`\$\relax \catcode`\noexpand\(=\the\catcode`\(\relax \catcode`\noexpand\)=\the\catcode`\)\relax \catcode`\noexpand\#=\the\catcode`\#\relax \catcode`\noexpand\^^L=\the\catcode`\^^L\relax \catcode`\noexpand\{=1 % \catcode`\noexpand\}=2 % } \catcode`\$=8 % \catcode`\(=1 % \catcode`\)=2 % \catcode`\^^L=\active \@makeother\{ \@makeother\} \def\IPL@IsPackageLater#1#2(% \begingroup \expandafter\def\csname ver@@test@.sty\endcsname()% \CatchFileDef\FileContents(#1.sty)(% \endlinechar=-1 % \catcode`\$=4 % \catcode`\^^L=10 % \catcode`\#=12 % \@makeother\{% \@makeother\}% )% \long\def\x##1\ProvidesPackage{#1}[##2]##3$(% \endgroup \expandafter\def\csname ver@@test@.sty\endcsname(##2)% )% \expandafter\x\FileContents\ProvidesPackage{#1}[]$% \@ifpackagelater(@test@)(#2)% ) \IPL@RestoreCatcodes \makeatother \typeout{test for package unknown 1000/00/00} \IsPackageLater{unknown}{1000/00/00}{\typeout{LATER}}{\typeout{NO}} \typeout{test for package abc 1000/01/01} \IsPackageLater{abc}{1000/01/01}{\typeout{LATER}}{\typeout{NO}} \typeout{test for package fontenc 3000/01/01} \IsPackageLater{fontenc}{3000/01/01}{\typeout{LATER}}{\typeout{NO}} \typeout{test for package fontenc 2005/09/01} \IsPackageLater{fontenc}{2005/09/01}{\typeout{LATER}}{\typeout{NO}} \typeout{test for package fontspec 2010/11/11} \IsPackageLater{fontspec}{2010/11/17}{\typeout{LATER}}{\typeout{NO}} \typeout{test for package fontspec 2008/08/09} \IsPackageLater{fontspec}{2008/08/09}{\typeout{LATER}}{\typeout{NO}} \typeout{test for package arev 2010/11/11 (uses "filedate"} \def\filedate{2005/06/14}% \IsPackageLater{arev}{2010/11/11}{\typeout{LATER}}{\typeout{NO}} \typeout{test for package arev 2001/11/11} \IsPackageLater{arev}{2001/11/11}{\typeout{LATER}}{\typeout{NO}} \begin{document} \end{document}