TikZ - 为什么线条的粗细被硬编码到调用 /tikz/line width - 键的样式中?

TikZ - 为什么线条的粗细被硬编码到调用 /tikz/line width - 键的样式中?

当使用 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=

但是这些样式不允许您访问这些值并对其进行计算。

我的问题是:

  1. 为什么线条粗细被硬编码到这些样式中,而不是像my thick我在示例中介绍的样式那样来自值键?

  2. 我是否忽略了一些或多或少微妙的东西,从而使得访问线粗细的计算变得过时?

  3. 有没有更好的方法来指定蓝色正方形的位置,以便红色正方形右边缘的线不与蓝色正方形左边缘的线重叠?

答案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}

在此处输入图片描述

相关内容