无法检测“外部” TikZ 库是否已加载

无法检测“外部” TikZ 库是否已加载

基于此回答,我尝试检测一个TikZ库是否已经加载。

由于我忽略的原因,它无法external在序言中被调用时检测到。

在此处输入图片描述

改编的MWE

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{external}

\makeatletter
\newcommand*\@tikzextension{code.tex}
\def\iftikzlibraryloaded#1{%
   \@ifl@aded\@tikzextension{tikzlibrary#1}
}
\makeatother

\iftikzlibraryloaded{external}
 {\def\OUTPUT{external loaded}}
 {\def\OUTPUT{external not loaded}}

\iftikzlibraryloaded{calc}
 {\def\OUTPUTT{calc loaded}}
 {\def\OUTPUTT{calc not loaded}}


\begin{document}

\OUTPUT

\OUTPUTT

\end{document}

答案1

区别在于tikzlibrarycalc.tex.code, 加载的源文件以\usetikzlibrary{calc}行开头\ProvidesFileRCS{tikzlibrarycalc.code.tex},但tikzlibraryexternal.tex.code不包含任何使用\ProvidesFileRCS

\ProvidesFileRCS{<file>}最终会调用\ProvidesFile{<file>},使得测试\@ifl@aded{<ext>}{<file>}成功。

如果你想要的只是检测external库是否已加载,那么你可以检测它提供的命令是否被定义,例如

\ifdefined\tikzexternalize
  \expandafter\@firstoftwo
\else
  \expandafter\@secondoftwo
\fi
{<loaded>}{<otherwise>}

如果你想进一步检测外化是否活性,,\tikzifexternalizing{<true>}{<false>}使用后\tikzexternalize,即可为您服务。

更新

我向 pgf-tikz 添加了问题,请参阅https://github.com/pgf-tikz/pgf/issues/1162。我还发现还有更多 tikz 库缺少\ProvidesFileRCS,因此\@ifl@aded它不是一个可靠的 tikz 库检测器。

更新 2

一个例子是@egreg 的回答,OP 链接问题的接受答案。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{external}

\makeatletter
% \IfTikzLibraryLoaded{<lib>}{<true code>}{<false code>}
\def\IfTikzLibraryLoaded#1{%
  \ifcsname tikz@library@#1@loaded\endcsname
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\makeatother


\begin{document}

calc: \IfTikzLibraryLoaded{calc}{loaded}{not loaded} \par
external: \IfTikzLibraryLoaded{external}{loaded}{not loaded}

\end{document}

输出:

calc: loaded
external: loaded

相关内容