TransWikia.com

macro only for tikz

TeX - LaTeX Asked on May 14, 2021

I have a macro written as newcommand which contains a complete new tikz-environment.

How could one make a macro out of this that only contains the content of the tikz-environment, so that if one wants to have this drawing multiple times, it is drawn in one single tikz-environment?

I know I could simply strip the declaration of the tikz-environment in my macro, but that would let me use the macro outside a tikz-environment too.

Examples:

I have a macro similar to the following one:

newcommand{myTikzMacro}{
  begin{tikzpicture}
    draw (0,0) rectangle (1,1);
    draw (1,1) rectangle (2,0);
  end{tikzpicture}

Now I could use the macro multiple times after each other like this:

myTikzMacro 
myTikzMacro 

But then multiple tikz-environments would be used. To avoid that I’d be able to make this macro:

newcommand{myTikzMacro2}{
    draw (0,0) rectangle (1,1);
    draw (1,1) rectangle (2,0);

And use it as followed:

begin{tikzpicture}
  myTikzMacro2
  myTikzMacro2
end{tikzpicture}

But this would enable me to use the macro outside a tikzpicture environment too which I’d like to avoid too.

Is there a way to declare macros only available/visible within tikzpicture environments? (maybe with pgfkeys)

One Answer

According to How can I check if the current code is inside a tikzpicture? tikz provides the macro

tikzifinpicture{true branch}{false branch}

for testing whether one is in a tikzpicture; the comments in its definition seem however to throw some doubts on its correctness. (I believe it might fail in nested pictures.) Assuming that it works in most simple cases you can define

newcommand*{myTikzPicture}
{tikzifinpicture
    {%
     draw (0,0) rectangle (1,1);
     draw (1,1) rectangle (2,0);
    }%
    {%
     GenericError{}{Unallowed command}
             {stringmyTikzPicturespace can be used only inside a tikz picture.}{}%
    }%
}

I used here GenericError. If the command will go into a custom package, using PackageError will be more appropriate.

Correct answer by campa on May 14, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP