我有一个由虚线组成的像素网格,我想使用 设置一个像素minimum size
。
如您所见,我手动设置了最小尺寸,这是可行的。但是,我想将其设置为另一个继承的样式键。我该怎么做?(幼稚的)注释掉的代码不起作用。
\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{calc}
\tikzset{
grid lines/.style={
line width=0.5pt,
dashed,
step=5mm},
pixel/.style={
grid lines,
solid,
draw,
% minimum size=\pgfkeysvalueof{step},
minimum size=5mm,
fill}
}
\begin{document}
\begin{tikzpicture}
\draw[grid lines] (0,0) grid (1,1);
\node[pixel] at (0.25,0.25) {};
\end{tikzpicture}
\end{document}
答案1
可以深入研究代码来了解其step
工作原理并读回神奇数字(\tikz@grid@x
和\tikz@grid@y
),但我建议采用不同的方法,即使用单独的键设置这些参数,然后在两个部分中使用这些键。
\documentclass[tikz, border=3mm]{standalone}
%\url{https://tex.stackexchange.com/q/660910/86}
\usetikzlibrary{calc}
\tikzset{
pixel/line width/.initial=0.5pt,
pixel/size/.initial=5mm,
grid lines/.style={
line width=\pgfkeysvalueof{/tikz/pixel/line width},
dashed,
step=\pgfkeysvalueof{/tikz/pixel/size}
},
pixel/.style={
solid,
draw,
line width=\pgfkeysvalueof{/tikz/pixel/size},
minimum size=\pgfkeysvalueof{/tikz/pixel/line width},
inner sep=0pt,
fill}
}
\begin{document}
\begin{tikzpicture}
\draw[grid lines] (0,0) grid (1,1);
\node[pixel] at (0.25,0.25) {};
\end{tikzpicture}
\end{document}
答案2
该\pgfkeysvalueof
宏仅适用于实际值键。
我猜是由于遗留的原因,键xstep
和ystep
只是定义了另一个宏(这里\tikz@grid@x
和\tikz@grid@y
),尽管它们也可以是值键。
并将step
这两个宏设置为相同的值?不,因为它还允许以坐标形式(以 开头(
)的值,并将 xstep 设置为该坐标的X值和该坐标的 ystep是价值。
即使我们找到了一种方法来检索赋予其中一个键的值,也需要考虑如何处理step = (15:1cm)
。
嗯,你总是可以在现有的密钥上添加更多内容,比如说,
@step/.initial=1cm,
step/.append style={/tikz/@step={#1}}
然后\pgfkeysvalueof{/tikz/@step}
返回最后给出的值step
(也可能是(15:1cm)
!)。
我们可以重写xstep
和ystep
的step
工作原理:
\tikzset{
xstep/.initial=1cm,
ystep/.initial=1cm,
}
\makeatletter
\def\tikz@step@single#1{%
\pgfkeyssetvalue{/tikz/xstep}{#1}%
\pgfkeyssetvalue{/tikz/ystep}{#1}}
\def\tikz@step@point#1{%
\pgf@process{#1}%
\pgfkeyssetevalue{/tikz/xstep}{\the\pgf@x}%
\pgfkeyssetevalue{/tikz/ystep}{\the\pgf@y}}
\def\tikz@grid@x{\pgfkeysvalueof{/tikz/xstep}}
\def\tikz@grid@y{\pgfkeysvalueof{/tikz/ystep}}
\makeatother
现在您可以使用\pgfkeysvalueof{/tikz/xstep}
/ \pgfkeysvalueof{/tikz/ystep}
...
但是您仍然会遇到 的情况,step = 1
因为 TikZ 允许在 xy 坐标系中使用无量纲单位。 ( 中的无量纲单位minimum size
将被解释为pt
。)
在您的情况下,您明确地使用step=5mm
并放入grid lines
其中,pixel
因此您避开了所有这些问题,但我想强调当您考虑到所有一般可能性和用例时,这会变得多么复杂。
综上所述,Andrew Stacey 的解决方案是一种更简洁的方法,可以让您(或您的用户)更好地控制绘制的内容。只是不要忘记只使用带单位的尺寸pixel/size
。