![为什么 \def 不能作为 TikZ 参数使用?](https://linux22.com/image/332763/%E4%B8%BA%E4%BB%80%E4%B9%88%20%5Cdef%20%E4%B8%8D%E8%83%BD%E4%BD%9C%E4%B8%BA%20TikZ%20%E5%8F%82%E6%95%B0%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
我刚刚开始学习一些 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