为了帮助我学习 Tikz,我认为如果我可以单独绘制每个 Tikz“对象”(以“;”结尾的东西),然后在最后将它们全部发送到 tikzpicture 以查看整个对象组合在一起,这将有所帮助。我在 Mathematica 中一直这样做,但我无法使用 Latex/Tikz 正确使用语法。
让我再解释一下,然后给出一个 MWE。假设我想画这幅图,它由 3 个独立的对象组成(代码来自这个答案)
\begin{tikzpicture}
\draw (-1,0) arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle;
\draw[dashed] (-1,0) arc (180:0:1cm and 0.5cm);
\shade[left color=blue!5!white,right color=blue!40!white,opacity=0.3]
(-1,0) arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle;
\end{tikzpicture}
我想在自己的图片上绘制每个对象,这样我就能看到它们的样子。所以我需要将每个对象分配给一个变量,以避免复制/粘贴相同的代码。也就是说,我想做这样的事情(但由于语法不正确,所以行不通),但只是为了给出我想要做的事情的想法
\documentclass{article}
\usepackage{tikz}
\usepackage{etoolbox}
\newbool{debug} \setbool{debug}{true} %flag for debugging
\begin{document}
%syntax error., Argument of \a has an extra }. }{}
\newcommand{\a}{\draw (-1,0) arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle}
\newcommand{\b}{\draw[dashed] (-1,0) arc (180:0:1cm and 0.5cm)}
\newcommand{\z}{\shade[left color=blue!5!white,right
color=blue!40!white,opacity=0.3](-1,0)
arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle}
\ifbool{debug}
{
\tikz{\a}
\tikz{\b}
\tikz{\z}
}{}
\begin{tikzpicture} %now put things all together, once get the syntax right
\a;
\b;
\z;
\end{tikzpicture}
\end{document}
以上就是我想要做的。现在,我这样做(复制/粘贴相同的代码)
\documentclass{article}
\usepackage{tikz}
\usepackage{etoolbox}
\newbool{debug} \setbool{debug}{true} %flag for debugging
\begin{document}
\ifbool{debug}
{
\tikz{\draw (-1,0) arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle}
\tikz{\draw[dashed] (-1,0) arc (180:0:1cm and 0.5cm)}
\tikz{\shade[left color=blue!5!white,right color=blue!40!white,opacity=0.3]
(-1,0) arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle}
}{}
\begin{tikzpicture}
\draw (-1,0) arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle;
\draw[dashed] (-1,0) arc (180:0:1cm and 0.5cm);
\shade[left color=blue!5!white,right color=blue!40!white,opacity=0.3]
(-1,0) arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle;
\end{tikzpicture}
\end{document}
我也尝试过\def
,但是也有很多语法错误。我是新手。
答案1
错误信息非常容易解释:
LaTeX Error: Command \a already defined
调用你的命令\za \zb \zz
然后它就会按你预期的方式工作。
\documentclass{article}
\usepackage{tikz}
\usepackage{etoolbox}
\newbool{debug} \setbool{debug}{true} %flag for debugging
\begin{document}
%syntax error., Argument of \a has an extra }. }{}
\newcommand{\za}{\draw (-1,0) arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle}
\newcommand{\zb}{\draw[dashed] (-1,0) arc (180:0:1cm and 0.5cm);}
\newcommand{\zz}{\shade[left color=blue!5!white,right color=blue!40!white,opacity=0.3]
(-1,0) arc (180:360:1cm and 0.5cm) -- (0,3) -- cycle;}
\ifbool{debug}
{
\tikz{\za}
\tikz{\zb}
\tikz{\zz}
}{}
\begin{tikzpicture} %now put things all together, once get the syntax right
\za;
\zb;
\zz;
\end{tikzpicture}
\end{document}