当使用 TikZ 绘制对象(例如矩形)时,为了获得这些对象的实际宽度,需要考虑线条的粗细。
下面的例子展示了这一点,您可以看到矩形对象的宽度也取决于线条的粗细:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pgfkeys{%
/tikz/my thick thickness/.initial=5mm,
/tikz/my thick/.style={/tikz/line width=\pgfkeysvalueof{/tikz/my thick thickness}},
}%
\begin{document}
\noindent
\begin{tikzpicture}
\draw[red, my thick] (0,0) rectangle (2cm,2cm);
\end{tikzpicture}
\medskip
\noindent\leaders\hrule\hskip\dimexpr
2cm+ \pgfkeysvalueof{/tikz/my thick thickness}\relax \space these are 2cm + thickness
of rules of the rectangle.
\noindent\leaders\hrule\hskip2cm \space these are 2cm.
\end{document}
例如,假设您需要两个矩形。
如果您这样做:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pgfkeys{%
/tikz/my thick thickness/.initial=5mm,
/tikz/my thick/.style={/tikz/line width=\pgfkeysvalueof{/tikz/my thick thickness}},
}%
\begin{document}
\noindent
\begin{tikzpicture}
\draw[red, my thick] (0,0) rectangle (2cm,2cm);
\draw[blue, my thick] (2cm,0) rectangle (4cm,2cm);
\end{tikzpicture}
\medskip
\noindent\leaders\hrule\hskip\dimexpr
2cm+ \pgfkeysvalueof{/tikz/my thick thickness}\relax \space these are 2cm + thickness
of rules of the rectangle.
\noindent\leaders\hrule\hskip2cm \space these are 2cm.
\end{document}
,则矩形的规则重叠:
为了避免这种情况,您需要考虑线条的粗细:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pgfkeys{%
/tikz/my thick thickness/.initial=5mm,
/tikz/my thick/.style={/tikz/line width=\pgfkeysvalueof{/tikz/my thick thickness}},
}%
\begin{document}
\noindent
\begin{tikzpicture}
\draw[red, my thick] (0,0) rectangle (2cm,2cm);
\draw[blue, my thick] (2cm+\pgfkeysvalueof{/tikz/my thick thickness},0) rectangle (4cm+\pgfkeysvalueof{/tikz/my thick thickness},2cm);
\end{tikzpicture}
\medskip
\noindent\leaders\hrule\hskip\dimexpr
2cm+ \pgfkeysvalueof{/tikz/my thick thickness}\relax \space these are 2cm + thickness
of rules of the rectangle.
\noindent\leaders\hrule\hskip2cm \space these are 2cm.
\end{document}
因此您可能需要让 TeX 进行计算,其中考虑线条/规则的粗细值。
但是使用 TikZ ,您只有样式/tikz/ultra thin
,/tikz/very thin
,/tikz/thin
,/tikz/semithick
,/tikz/thick
,用于使用特定值调用-key。/tikz/very thick
/tikz/ultra thick
/tikz/line width=
但是这些样式不允许您访问这些值并对其进行计算。
我的问题是:
为什么线条粗细被硬编码到这些样式中,而不是像
my thick
我在示例中介绍的样式那样来自值键?我是否忽略了一些或多或少微妙的东西,从而使得访问线粗细的计算变得过时?
有没有更好的方法来指定蓝色正方形的位置,以便红色正方形右边缘的线不与蓝色正方形左边缘的线重叠?
答案1
我无法回答你所有的问题,但至少可以回答你的最后一个问题。你可以使用 tikzlibrary 定位矩形而无需任何计算positioning
。将矩形绘制为node
并为其命名,以便你可以参考它们。通过使用该选项,right = 0cm of rectangleA
定位将自动从节点的边界(即其外端)(包括线粗)计算。你的代码看起来与下面的代码大致相同。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\pgfkeys{%
/tikz/my thick thickness/.initial=5mm,
/tikz/my thick/.style={/tikz/line width=\pgfkeysvalueof{/tikz/my thick thickness}},
}%
\begin{document}
\noindent
\begin{tikzpicture}
\node[draw, red, my thick, minimum width=2cm, minimum height=2cm] (rectA) at (0,0) {};
\node[draw, blue, my thick, minimum width=2cm, minimum height=2cm, right = 0cm of rectA] (rect) {};
\end{tikzpicture}
\medskip
\noindent\leaders\hrule\hskip\dimexpr
2cm+ \pgfkeysvalueof{/tikz/my thick thickness}\relax \space these are 2cm + thickness
of rules of the rectangle.
\noindent\leaders\hrule\hskip2cm \space these are 2cm.
\end{document}