输出:

输出:

我想为某个形状(比如说正方形)画一条粗边框里面而不是像图中所示那样位于其中心。我对获得第二种情况感兴趣。 中间绘制边框与内部绘制边框

不幸的是,我找不到任何有关此问题的信息。如果有人能帮助我,我将不胜感激。提前谢谢您。

\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,但缩小量wdblownup用于此的宏来自 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 widthminimum heightminimum 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}

相关内容