มาโครสำหรับ tikz เท่านั้น
ฉันมีมาโครที่เขียนว่า\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)
คำตอบ
ตามฉันจะตรวจสอบได้อย่างไรว่ารหัสปัจจุบันอยู่ใน 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จะเหมาะสมกว่า