抱歉,这个问题听起来太基础了。我是 TikZ 的新手,但我有使用 LaTeX 的经验。
假设我在 LaTeX 文档中有多个 TikZ 语句,如下所示:
\tikz\draw[line width=2mm] (0,0.1) -- (4,0.1);\hfill\textsc{\Large This is a block}%
\hfill \tikz\draw[line width=2mm] (0,0.1) -- (4,0.1);
我想定义变量(line_thickness
例如line_width
:
line_thickness = 2mm
line_width = 4
我可以在所有这些语句中使用它,这样,如果我想更改 LaTeX 文档中绘图的参数,我只需在定义变量的地方更改它们的值即可。
在 TikZ 中可以做到这一点吗?我对一个相对通用的解决方案感兴趣,例如其中一些变量可能会指定颜色,长度,相对坐标等等,尽管解决我的上述特定问题的解决方案已经有很大帮助。
我已阅读这些帖子中的解决方案:
但我不知道如何将这些答案应用到我的问题上。
答案1
变量,或者更准确地说样式或者键,pgf
是引入的一项非常强大的功能,用于帮助创建绘图框架。我在这里说,pgf
因为这实际上是TikZ
使用如此多的底层机制。请注意,这\tikzset
相当于\pgfkeys{/tikz/.cd,#1}
。
如果您想要快速得到答案,请转到键/样式的范围。
在我的回答中,很多人会看到手册中提到的东西。这是故意的。
我不会讨论树结构,也不会讨论处理程序引入的非常强大的功能,也不会讨论。代码就像这样 .styles控制用户界面。我不会区分.styles和。代码因为它无助于关键结构的基本解释。
样式:代码执行的快捷方式
这是创建图片/路径时最常用的功能。每次添加路径时,都会添加thick
、color=red
或line width=2mm
。
A。风格实际上是单/多的缩写或缩写。代码键。这意味着。风格实际上什么也没做,只是本文中的参考资料起了作用。注意那。风格也可以指任何其他。风格。
因此,当您需要缩短或对路径执行多项操作时,通常会使用样式。
一个例子:
\tikzset{%
my box color red/.style={%
draw,color=red!50!white,fill=black!20!red!50!white
}
}
现在看看下面两条路径。它们实际上是完全相同的。
\path[my box color red] (0,0) -- (1,0);
\path[draw,color=red!50!white,fill=black!20!red!50!white] (0,.1) -- (1,.1);
请注意,指的my box color red
是其他风格,draw
即color=red!50!white
和fill=black!20!red!50!white
。
后来我们意识到,my box color <color>
必须在几个地方使用几种不同的颜色。
一个解决方案可能是生成.styles然而,对于每种将要使用的颜色来说,这似乎是多余的。
每种风格都是独一无二的选修的争论。
这意味着我们可以定义。风格作为:
\tikzset{%
my box color/.style={%
draw,color=#1!50!white,fill=black!20!#1!50!white
}
}
现在看看下面的两条和两条路径。它们实际上完全相同,分别是两条和两条。
\path[my box color=red] (0,0) -- (1,0);
\path[draw,color=red!50!white,fill=black!20!red!50!white] (0,.1) -- (1,.1);
\path[my box color=blue] (0,0) -- (1,0);
\path[draw,color=blue!50!white,fill=black!20!blue!50!white] (0,.1) -- (1,.1);
我们之所以创建它my box color
,是因为这样排版更加容易,而且我必须多次使用它。
样式及其默认值
如果使用上述样式,my box color
则无法编译:
\path[my box color] (0,0) -- (1,0);
原因是该风格color
有一个强制性的参数。你将会无意中了解到这一点,我就是这样的。因此上述代码永远无法编译。
然而,如果没有指定参数,您通常需要默认行为。
以这种向路径添加箭头的样式为例。它接受一个参数,即箭头在路径上的分数位置。
\tikzset{%
->-/.style={postaction={decorate},decoration={%
markings,mark=at position #1 with {\arrow{stealth}}%
}%
}%
}
这似乎很明显,它应该始终将箭头放在0.5
路径上的位置。但除非您->-=0.5
每次需要使用它时都指定,否则它不会这样做。
同时使用。默认风格规范。
所以:
\tikzset{%
->-/.default=.5%
}
确保如果你这样做不是指定路径上的分数位置,它将像您指定的那样->-=0.5
。
\begin{tikzpicture}
% Will have arrow at 0.5
\draw[->-] (0,0) -- (1,0);
% Will have arrow at 0.3
\draw[->-=0.3] (0,.1) -- (1,.1);
\end{tikzpicture}
已使用款式的使用寿命
有时您会遇到定义几种样式但同时引用另一种样式的情况。
例子:
\tikzset{%
my box/.style={thin,color=red},
my thick box/.style={thick,color=blue}
}
\begin{tikzpicture}
% line 1
\draw[my box] (0,0) -- (1,0);
% line 2
\draw[my thick box] (0,.1) -- (1,.1);
% line 3
\draw[my thick box,my box] (0,.2) -- (1,.2);
% line 4
\draw[my box,my thick box] (0,.3) -- (1,.3);
% line 5
\draw[my box,my thick box,thin] (0,.3) -- (1,.3);
\end{tikzpicture}
在上图中,你可以看到 5 条线。前两条很明显分别是红色和蓝色。但是最后两条呢?
这个问题可以通过知道关键点来回答读和执行 连续。因此,这些线将具有以下属性:
- 红而薄
- 蓝色而浓厚
- 红而薄
- 蓝色而浓厚
- 蓝色又薄
因此,您不必担心按键重叠,只需知道最后看到的按键优先于其他按键。
键/样式的范围
正如您的问题所基本提到的,范围非常重要TikZ
。
您应该期望键/样式具有与普通组相同的范围TeX
,即它们存在直到当前组结束。
全球
因此,如果您在序言中,或者不在嵌套组中的其他地方,请设置:
\tikzset{%
line width=2mm
}
line width
这将是一个全局设置的变量。它将对所有使用长度的图纸和形状生效。
全球图片
这是指仅存在于当前图片中的样式。
\begin{tikzpicture}[line width=10mm] % Picture Globally
% will have width of 10mm
\draw (0,0) -- (1,0);
\end{tikzpicture}
本地图片
仅在当前路径上采用的样式的声明。
\begin{tikzpicture}
% will have width of 7mm
\draw[line width=7mm] (0,0) -- (1,0);
\end{tikzpicture}
集
以下是它们在文档中不同位置的定义示例:
\tikzset{%
line width=2mm
}
\begin{tikzpicture}[line width=10mm] % overwrites the above
% will have width of 10mm
\draw (0,0) -- (1,0);
% will have width of 3mm, will override the above
\draw[line width=3mm] (0,0) -- (1,0);
\end{tikzpicture}
\begin{tikzpicture}
% will have width of 2mm, due to the globally defined style.
\draw (0,0) -- (1,0);
% will have width of 7mm, overrides the global set style.
\draw[line width=7mm] (0,0) -- (1,0);
\end{tikzpicture}