为什么 \def 不能作为 TikZ 参数使用?

为什么 \def 不能作为 TikZ 参数使用?

我刚刚开始学习一些 TeX 编程,正在学习纯 TeX 中的 TikZ。我的问题是为什么以下内容无法按预期工作;我尝试将其定义\sty为 TikZ 绘图参数,但似乎不起作用。

\nopagenumbers
\input tikz.tex

\def\center#1\endcenter{\centerline{#1}}

\def\sty{step=.5cm,gray,very thin}
This is my first plain \TeX\ file. Let me try some commands below:
\vskip 1cm
\center
\tikzpicture[scale=3]
\draw [\sty] (-1.4,-1.4) grid (1.4,1.4);
\draw [->](-1.5,0) -- (1.5,0);
\draw [->](0,-1.5) -- (0,1.5);
\draw (0,0) circle [radius=1cm];
\path[fill,draw][fill=green!20!white, draw=green!50!black] (0,0) -- (3mm,0mm) arc [start angle=0, end angle=30, radius=3mm] -- cycle;
\endtikzpicture
\endcenter

\bye

也许这与 TeX 文档的编译/解析顺序有关。但我不确定。

答案1

所包含的键值\sty不会以这种方式扩展,这会导致错误。

\draw \expandafter[\sty]...但是您可以使用

然而,使用 atikzstyle更好。

\nopagenumbers
\input tikz.tex

\def\center#1\endcenter{\centerline{#1}}

\def\sty{step=.5cm,gray,very thin,dashed}
This is my first plain \TeX\ file. Let me try some commands below:
\vskip 1cm
\center
\tikzpicture[scale=3]
\draw \expandafter[\sty] (-1.4,-1.4) grid (1.4,1.4);
\draw [->](-1.5,0) -- (1.5,0);
\draw [->](0,-1.5) -- (0,1.5);
\draw (0,0) circle [radius=1cm];
\path[fill,draw][fill=green!20!white, draw=green!50!black] (0,0) -- (3mm,0mm) arc [start angle=0, end angle=30, radius=3mm] -- cycle;
\endtikzpicture
\endcenter

\bye

答案2

尽管可以使用如下所示的宏Christian Hupfer 的回答,无论你为文档选择哪种宏格式,这实际上都不是使用 TikZ 的最佳方法。相反,最好使用 TikZ 的键值语法来创建带有 的样式sty\tikzset{}但请注意, 已\tikzstyle弃用,不应在新代码中使用。

\tikzset{sty/.style={step=.5cm,gray,very thin}}

可以按常规方式使用

\tikzset{sty/.style={step=.5cm,gray,very thin}}

麦粒肿样式应用

\nopagenumbers
\input tikz.tex

\def\center#1\endcenter{\centerline{#1}}

\tikzset{sty/.style={step=.5cm,gray,very thin}}
This is my first plain \TeX\ file. Let me try some commands below:
\vskip 1cm
\center
\tikzpicture[scale=3]
\draw [sty] (-1.4,-1.4) grid (1.4,1.4);
\draw [->](-1.5,0) -- (1.5,0);
\draw [->](0,-1.5) -- (0,1.5);
\draw (0,0) circle [radius=1cm];
\path[fill,draw][fill=green!20!white, draw=green!50!black] (0,0) -- (3mm,0mm) arc [start angle=0, end angle=30, radius=3mm] -- cycle;
\endtikzpicture
\endcenter

\bye

答案3

该宏隐藏了语法字符。键值对的分隔符逗号和等号需要对键值解析器可见。

但是可以通过\tikzstyle(似乎已被弃用,文档使用它,但没有解释它)或通过.style处理程序定义样式,例如:

\nopagenumbers
\input tikz.tex

\def\center#1\endcenter{\centerline{#1}}

\tikzset{
  mygridstyle/.style={
    step=.5cm,
    gray,
    very thin,
  },
}

This is my first plain \TeX\ file. Let me try some commands below:
\vskip 1cm
\center
\tikzpicture[scale=3]
\draw [mygridstyle] (-1.4,-1.4) grid (1.4,1.4);
\draw [->](-1.5,0) -- (1.5,0);
\draw [->](0,-1.5) -- (0,1.5);
\draw (0,0) circle [radius=1cm];
\path[fill=green!20!white, draw=green!50!black] (0,0) --
(3mm,0mm) arc [start angle=0, end angle=30, radius=3mm] -- cycle;
\endtikzpicture
\endcenter

\bye

结果

相关内容