tikz: 화살표, 홀수 룰, 사다리꼴 모양; 구멍을 통해 화살표를 그리는 방법

tikz: 화살표, 홀수 룰, 사다리꼴 모양; 구멍을 통해 화살표를 그리는 방법

나는 다음과 같이 tikz하고 싶습니다 :

목표

와 함께:

% https://tex.stackexchange.com/q/245944
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\standaloneenv{tikzpicture}
\begin{document}
\usetikzlibrary{calc,shapes.geometric}
\begin{tikzpicture}
    \coordinate (hole) at (1ex, 3ex);
    \node[trapezium, trapezium left angle=120, trapezium right angle=60, minimum width=4ex, minimum height=4ex, rotate=30] (layer) {};
    \path[draw, even odd rule]
        {(layer.top left corner) -- (layer.bottom left corner) -- (layer.bottom right corner) -- (layer.top right corner) -- cycle}
        {($(layer.bottom left corner)+(hole)$) ellipse [draw, x radius=1.0ex,y radius=0.8ex, rotate=0]};
    \draw[-]  ($(layer.bottom left corner)+(hole)$)            -- +(0ex, 4ex);
    \draw[->] ($(layer.bottom left corner)+(hole)+(0ex,-3ex)$) -- +(0ex,-2ex);
\end{tikzpicture}
\end{document}

나는 다음을 생산할 수 있다:

음

그러나 이 솔루션은 조잡하고(사다리꼴 다시 그리기, 화살표를 둘로 나누기 등...) 약간 생명력이 없는 것처럼 느껴집니다.

even odd rulewith trapezium를 추가 없이 사용 하고 화살표 간 간격의 크기를 추측하지 않고 구멍을 \path통해 화살표를 그리는 방법 은 무엇입니까?even odd rule

답변1

이것은 에 짝수 홀수 규칙을 사용합니다 \clip. 3D 개체의 경우 전경과 배경을 분리해야 합니다.

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\standaloneenv{tikzpicture}
\begin{document}
\usetikzlibrary{calc,shapes.geometric}
\begin{tikzpicture}
    \coordinate (hole) at (1ex, 3ex);
    \node[trapezium, trapezium left angle=120, trapezium right angle=60, minimum width=4ex, minimum height=4ex, rotate=30] (layer) {};
    \path[draw]
        (layer.top left corner) -- (layer.bottom left corner) -- (layer.bottom right corner) -- (layer.top right corner) -- cycle
        ($(layer.bottom left corner)+(hole)$) coordinate(C) ellipse [draw, x radius=1.0ex,y radius=0.8ex, rotate=0];
    \path[->] (C) ++(0ex, 4ex) -- ++(0ex,-8ex);% grow bounding box
    \begin{scope}[even odd rule]
    \clip (current bounding box.south west) rectangle  (current bounding box.north east)
        (layer.top left corner) -- (layer.bottom left corner) -- (layer.bottom right corner) -- cycle;
    \draw[->] (C) ++(0ex, 4ex) -- ++(0ex,-8ex);
    \end{scope}
\end{tikzpicture}
\end{document}

관련 정보