基于此回答,我尝试检测一个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