TeX 源的双重兼容性

TeX 源的双重兼容性

考虑以下情况。您在本地机器上享受 TeXing,享受各种软件包的最新版本。例如,利用TikZ/externalize... 或的优势biblatex

唉……你大学的 TeX 安装太旧了,或者你的合作者无法使用你的尖端软件包。然后,在另一个系统上签出副本无法编译!

我刚刚使用过的一个解决方案是从源代码中删除所有花哨的东西,使其与旧式系统兼容。然而,这有很大的缺点;例如,现在编译源代码(在本地机器上)需要更长的时间,因为您无法利用最新安装的版本TikZ

让我集中讨论一下这个TikZ问题。有没有办法自动化解决方案?也就是说,在编译开始时运行测试,然后使能够或者禁用包的使用externalize取决于文档当前编译的系统?

这种方法有意义吗?

编辑:

我冒着过于本地化的风险,但我确实想找到一个解决方案并接受这里的答案。我尝试使用@JosephWright 的想法如下:

\makeatletter
\IfFileExists{tikzexternal.sty}
{%
  \usetikzlibrary{external}%
  \tikzexternalize%
  \tikzsetexternalprefix{figures/cache/}%
  \renewcommand{\todo}[2][]{%
    \tikzexternaldisable\@todo[#1]{#2}\tikzexternalenable}%
}%
{%
}%
\makeatother

编译时我出现以下错误:Illegal parameter number in definition of \reserved@a.我不知道如何修复...有什么想法吗?

答案1

LaTeX 提供了两个有用的工具:\IfFileExists\@ifpackagelater。如果我们以问题中概述的情况为例,我们无法确定该文件是否可用。我将概括为一个包foo,它可能会给出类似

\makeatletter
\IfFileExists{foo.sty}
   {%
     % True branch
     \usepackage{foo}
     \@ifpackagelater{foo}{2012/10/23}
       {%
         % All good: use latest code
       }
       {%
         % Code older: fall back on something?
       }%
   }
   {%
     % False branch: backup plan
   }%
\makeatother

请注意,如果日期匹配,则\@ifpackagelater实际上会给出日期,并且需要来自 LaTeX 包(行)的TRUE日期。还请注意,通常会查找文件,因此我们需要\ProvidesPackage\IfFileExists满的名称(包括扩展名)。

相关内容