12

I want to write some demo code showing code with examples for tikz. However I want the resulting pdf to be automatically depended on the tikz libraries and therefore I must test which are loaded.

Is this functionality implemented in tikz already or can I test for the existence of special commands?

EDIT:

Example which shows that the code does not work outside the preamble. I however need code that works everywhere:

\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}

2 Answers 2

16

When tikz loads the library foo, it defines the macro \tikz@library@foo@loaded. Therefore the following code will do the job:

\makeatletter
\def\IfTikzLibraryLoaded#1{%
  \ifcsname tikz@library@#1@loaded\endcsname
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\makeatother
1
  • I made a remix of this solution (thanks!) to make it a one-liner that can go inside the document rather than on the preamble. Here it goes: \def\CheckTikzLibraryLoaded#1{ \ifcsname tikz@library@#1@loaded\endcsname \else \PackageWarning{tikz}{You forgot to add usetikzlibrary{#1} in the preamble!} \fi } \CheckTikzLibraryLoaded{circuits} Oct 20, 2021 at 12:36
8

you can create a new command based on the definition of the command \@ifpackageloaded:

In the example below I provided the new conditional \iftikzlibraryloaded with the syntax:

\iftikzlibraryloaded{<name>}%
 {True Code}%
 {False Code}

Here the complete example:

\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}
11
  • You are not using \@ifpackageloaded, at least I see not where. What is \@ifl@aded actually doing and what is your meaning of \@tikzextension ? Is this code working also outside the preamble? Mar 18, 2012 at 9:20
  • @MatthiasPospiech: \@ifpackageloaded is defined as \def\@ifpackageloaded{\@ifl@aded\@pkgextension}. Do you see what I mean?. A library of tikz has the following syntax tikzlibrary<Name of Library>.code.tex and the command \@ifl@aded requires two arguments. The first one is the extension. Mar 18, 2012 at 9:24
  • Ok, but as far as I know \@ifpackageloaded only works in preamble. Mar 18, 2012 at 9:53
  • @MatthiasPospiech: That's right. In the file latex.ltx you can find the relevant part \@onlypreamble\@ifpackageloaded. I don't set this. Mar 18, 2012 at 9:55
  • Ok, so If I use only \@ifl@aded I do not have this proble, correct? Mar 18, 2012 at 10:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .