มาโครสำหรับ tikz เท่านั้น

Oct 07 2020

ฉันมีมาโครที่เขียนว่า\newcommandมีสภาพแวดล้อม tikz ใหม่ที่สมบูรณ์

เราจะสร้างมาโครจากสิ่งนี้ที่มีเฉพาะเนื้อหาของ tikz-environment ได้อย่างไรดังนั้นหากต้องการให้ภาพวาดนี้หลาย ๆ ครั้งมันจะถูกวาดในสภาพแวดล้อม tikz เดียว

ฉันรู้ว่าฉันสามารถถอดคำประกาศของ tikz-environment ในมาโครของฉันได้ แต่นั่นจะทำให้ฉันใช้มาโครนอกสภาพแวดล้อม tikz ได้เช่นกัน

ตัวอย่าง:

ฉันมีมาโครที่คล้ายกับสิ่งต่อไปนี้:

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

ตอนนี้ฉันสามารถใช้มาโครหลาย ๆ ครั้งต่อกันได้ดังนี้:

\myTikzMacro \\
\myTikzMacro \\

แต่จากนั้นจะใช้สภาพแวดล้อม tikz หลายแบบ เพื่อหลีกเลี่ยงไม่ให้ฉันสามารถสร้างมาโครนี้ได้:

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

และใช้ดังต่อไปนี้:

\begin{tikzpicture}
  \myTikzMacro2
  \myTikzMacro2
\end{tikzpicture}

แต่สิ่งนี้จะทำให้ฉันใช้มาโครนอกtikzpictureสภาพแวดล้อมได้เช่นกันซึ่งฉันก็ต้องการหลีกเลี่ยงเช่นกัน

มีวิธีประกาศมาโครที่ใช้ได้ / มองเห็นได้เฉพาะในสภาพแวดล้อม tikzpicture หรือไม่? (อาจจะมี pgfkeys)

คำตอบ

1 campa Oct 07 2020 at 21:23

ตามฉันจะตรวจสอบได้อย่างไรว่ารหัสปัจจุบันอยู่ใน tikzpicture หรือไม่? tikzให้มาโคร

\tikzifinpicture{true branch}{false branch}

สำหรับการทดสอบว่าอยู่ใน a tikzpicture; อย่างไรก็ตามความคิดเห็นในคำจำกัดความนั้นดูเหมือนจะทำให้เกิดข้อสงสัยในความถูกต้อง (ฉันเชื่อว่ามันอาจล้มเหลวในรูปภาพที่ซ้อนกัน) สมมติว่ามันใช้งานได้ในกรณีง่ายๆส่วนใหญ่ที่คุณกำหนดได้

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

\GenericErrorผมใช้ที่นี่ หากคำสั่งไปอยู่ในแพ็คเกจที่กำหนดเองการใช้\PackageErrorจะเหมาะสมกว่า