调试 tikz:如何将每个单独的 tikz 对象分配给一个变量,然后将它们添加到图片中?

调试 tikz:如何将每个单独的 tikz 对象分配给一个变量,然后将它们添加到图片中?

为了帮助我学习 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}

Mathematica 图形

我想在自己的图片上绘制每个对象,这样我就能看到它们的样子。所以我需要将每个对象分配给一个变量,以避免复制/粘贴相同的代码。也就是说,我想做这样的事情(但由于语法不正确,所以行不通),但只是为了给出我想要做的事情的想法

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

Mathematica 图形

我也尝试过\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}

相关内容