我想为某个形状(比如说正方形)画一条粗边框里面而不是像图中所示那样位于其中心。我对获得第二种情况感兴趣。
不幸的是,我找不到任何有关此问题的信息。如果有人能帮助我,我将不胜感激。提前谢谢您。
\filldraw
使用命令绘制形状
\filldraw[fill=white, draw=yellow, line width=3mm] (0, 0) rectangle +(2, 2);
答案1
您可以剪切一半,然后强制它再次绘制两倍线宽。范围限制了剪切效果。
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\clip[postaction={fill=white, draw=yellow, line width=6mm}] (0,0) rectangle +(2,2);
\end{scope}
\draw (0,0) rectangle (2,2);
\end{tikzpicture}
\end{document}
或者使用 Mark Wibrow 的进一步快捷方式使其成为一行
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[preaction={clip,postaction={fill=white, draw=yellow, line width=6mm}}]
(0,0) rectangle +(2,2);
\end{tikzpicture}
\end{document}
答案2
穷人的解决方案:如果你知道line width
,你可以调整外部矩形的角
\documentclass[tikz,border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}
\filldraw[fill=white, draw=yellow, line width=3mm] (0, 0) rectangle +(2, 2);
\draw[red] (0,0) rectangle +(2,2);
\draw[green] ([shift={(-1.5mm,-1.5mm)}]0,0) rectangle +([shift={(3mm,3mm)}]2,2);
\end{tikzpicture}
\end{document}
如果它是一个节点,则绘制一个矩形,其角与节点的角相同
\begin{tikzpicture}
\node[fill=white, draw=yellow, line width=3mm, minimum size=2cm] (a) {};
\draw[red] (a.south west) rectangle (a.north east);
\end{tikzpicture}
答案3
使用 MetaPost 完成,它对感兴趣的人有用。drawinside
宏以路径p
和数字wd
作为参数,p
用绘图所需的颜色填充(此处为黄色)并取消填充p
,但缩小量wd
。blownup
用于此的宏来自 MetaPost 的 Metafun 格式。
我将其应用到长度为 3 cm 且边框宽度为 6 bp(bp = PostScript 点)的正方形上。当然,它可以是任何其他(封闭)路径和用户指定的任何其他宽度。
\documentclass[border=2mm]{standalone}
\usepackage{luamplib}
\mplibsetformat{metafun}
\begin{document}
\begin{mplibcode}
def drawinside (expr p, wd) =
fill p withcolor yellow; unfill p blownup -wd;
enddef;
path sqr; sqr = fullsquare scaled 6cm;
beginfig(1);
drawinside (sqr, 6bp); draw sqr dashed evenly withcolor red;
endfig;
\end{mplibcode}
\end{document}
使用 LuaLaTeX 排版。输出:
答案4
假设使用节点与minimum width
、minimum height
和minimum size
选项结合来生成正方形和/或矩形,另一个可能的解决方案是通过从中减去来调整提供的尺寸\pgflinewidth
(每个方向上绘制两条线,并且每条绘制的线只有一半绘制在形状之外,从而给我们2*\pgflinewidth/2 = \pgflinewidth
)。
这意味着我们可以绘制任意大小的正方形/矩形,只要考虑到边框的大小,生成的形状就有正确的大小。在下面的示例输出中,两个带有黄色边框的形状没有调整大小。同样的两个形状在它们上面绘制了一个红色边框,但这些形状的大小通过减去它们来调整\pgflinewidth
。调整后的形状的不透明度会降低以展示效果。
输出:
解决方案:
\documentclass[tikz,border=2mm]{standalone}
\tikzset{%
regularsquare/.style={line width=2pt,draw=yellow,fill=white,minimum size=1cm},
adjustedsquare/.style={line width=2pt,draw=yellow,fill=white,minimum size=1cm-\pgflinewidth},
regularrectangle/.style={line width=4pt,draw=yellow,fill=white,minimum height=0.5cm,minimum width=1cm},
adjustedrectangle/.style={line width=4pt,draw=yellow,fill=white,minimum height=0.5cm-\pgflinewidth,minimum width=1cm-\pgflinewidth},
}
\begin{document}
\begin{tikzpicture}
\node[regularsquare,] at (0,0) {};
\node[adjustedsquare,draw=red,opacity=0.5,] at (0,0) {};
\node[regularrectangle,] at (0,-1.2cm) {};
\node[adjustedrectangle,draw=red,opacity=0.5,] at (0,-1.2cm) {};
\end{tikzpicture}
\end{document}