我想编写一些演示代码,展示 tikz 的示例代码。但是我希望生成的 pdf 自动依赖于 tikz 库,因此我必须测试哪些库已加载。
此功能是否已在 tikz 中实现,或者我可以测试特殊命令是否存在?
编辑:
示例显示代码在序言之外不起作用。但我需要可以在任何地方运行的代码:
\documentclass[]{scrbook}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{circuits}
\makeatletter
\newcommand*\@tikzextension{code.tex}
\def\IfTikzLibraryLoaded#1{%
\@ifl@aded\@tikzextension{tikzlibrary#1}
}
\makeatother
\listfiles
\begin{document}
\IfTikzLibraryLoaded{circuits}{is loaded}{not loaded}
\end{document}
答案1
当tikz
加载库时foo
,它会定义宏\tikz@library@foo@loaded
。因此,以下代码将完成该工作:
\makeatletter
\def\IfTikzLibraryLoaded#1{%
\ifcsname tikz@library@#1@loaded\endcsname
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\makeatother
答案2
您可以根据命令的定义创建一个新的命令\@ifpackageloaded
:
在下面的例子中,我提供了\iftikzlibraryloaded
具有以下语法的新条件:
\iftikzlibraryloaded{<name>}%
{True Code}%
{False Code}
完整的例子如下:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{calc}
\makeatletter
\newcommand*\@tikzextension{code.tex}
\def\iftikzlibraryloaded#1{%
\@ifl@aded\@tikzextension{tikzlibrary#1}
}
\makeatother
\iftikzlibraryloaded{calc}
{\def\OUTPUT{calc loaded}}
{\def\OUTPUT{calc not loaded}}
\begin{document}
\OUTPUT
\end{document}