Нарисуйте фигуру «внутри» другой фигуры.

Нарисуйте фигуру «внутри» другой фигуры.

Я хотел бы нарисовать фигуру (только с прямыми углами) внутри другой (только с прямыми углами). Края должны быть как можно ближе, не перекрывая друг друга.

Я могу сделать кое-что вручную, например:

\documentclass[tikz, border=2mm]{standalone}
\begin{document}
    \begin{tikzpicture}
        \draw [] (0, 0) -- (1, 0) -- (1, 1) -- (3, 1) -- (3, 2) -- (0, 2) -- (0, 0);
        \draw [color=red] (0.02, 0.02) -- (0.98, 0.02) -- (0.98, 1.02) -- (2.98, 1.02) -- (2.98, 1.98) -- (0.5, 1.98) --
        (0.5, 1) -- (0.02, 1) -- % Part that diverges
        (0.02, 0.02);
    \end{tikzpicture}
\end{document}

который производит

введите описание изображения здесь

но, конечно, это не очень надежно («сдвиг» 0,02 приходится пересчитывать, если ширина меняется) и не переносимо. Есть ли способ получше?

решение1

Попробуйте следующее:

\documentclass[tikz, border=2mm]{standalone}

\begin{document}
    \begin{tikzpicture}[
u/.style = {yshift=#1\pgflinewidth},
s/.style = {xshift=#1\pgflinewidth}
                        ]
\draw   (0, 0) -- (1, 0) -- (1, 1) -- (3, 1) -- (3, 2) -- (0, 2) -- cycle;
\draw[color=red] 
        ([u,s] 0,0) -| ([u,s=-] 1,1) -| ([u=-,s=-] 3,2) 
                    -| ([u=-] 0.5,1) -| cycle;
    \end{tikzpicture}
\end{document}

введите описание изображения здесь

Вы можете рисовать черные линии таким же образом, как я рисую красные (используя -|ортогональные координаты, что значительно сокращает код).

Связанный контент