下面的代码
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\path [style={draw}] (0,0) rectangle (4,1);
\path [style={draw}] (0,1) rectangle (4,2);
\path [style={draw,thick,fill=orange}] (0,1) rectangle (1,2);
\end{tikzpicture}
\end{document}
生成如下图像:
仔细观察后,可以发现矩形在边界上没有正确相交(为了更好的可见性,画得有点夸张):
有没有办法让矩形完美契合?我知道在某些坐标上加/减 0.01 是可行的,但这并不是一个真正干净的解决办法。
答案1
PSTricks 解决方案:
\documentclass{article}
\usepackage{pstricks}
\begin{document}
\psset{dimen = m} % no overlapping of the rectangles
\begin{pspicture}(8,4)
\psframe(0,0)(8,2)
\psframe(0,2)(8,4)
\psframe[
fillstyle = solid,
fillcolor = orange!70
](0,2)(2,4)
\end{pspicture}
\end{document}
或者
\documentclass{article}
\usepackage{pstricks}
\begin{document}
\psset{dimen = m} % no overlapping of the rectangles
\begin{pspicture}(8,4)
\psframe(0,0)(8,2)
\psframe(0,2)(8,4)
\psframe[
dimen = o, % aligns the outer part of the top right (the 'thick') rectangle with the two bigger ones
linewidth = 2pt,
fillstyle = solid,
fillcolor = orange!70
](0,2)(2,4)
\end{pspicture}
\end{document}
答案2
不对齐是由于thick
对一个矩形使用了 而对其他矩形没有使用 造成的。如果您需要可变的线宽,您可以通过检查 TikZ 对常规和粗线使用的宽度或指定所需的宽度来补偿差异。例如:
\documentclass[a4paper,10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\path [draw, line width=.4pt] (0,0) rectangle (4,1);
\path [draw, line width=.4pt] (0,1) rectangle (4,2);
\path [draw, line width=1pt, fill=orange] ($(0,1) + (.3pt,.3pt)$) rectangle ($(1,2) - (.3pt,.3pt)$);
\end{tikzpicture}
\end{document}
使用的值.3pt
是因为它是线条粗细差异的一半。calc
使用的值是为了可以直接输入,而不必弄清楚如何调整坐标本身。
我不确定你说这种解决方案不是“干净”的解决方案是什么意思。否则,你就是告诉 TikZ 绘制一些由于你定义事物的方式而无法对齐的东西。如果你想要对齐事物,显然需要以不同的方式指定它们。