McCurdy와 같은 모노이드 펑터에 대한 문자열 다이어그램

McCurdy와 같은 모노이드 펑터에 대한 문자열 다이어그램

여러분은 Micah McCurdy가 누구인지 거의 모르시겠지만, 여기에 그의 다이어그램 샘플이 있습니다.20~21페이지, 예를 들어 더 멋진 내용을 보려면 27페이지를 참조하세요. 나는 그에게 어떻게 했는지 물었고, 불행하게도 그것은 두 개의 별도 소프트웨어 패키지를 포함하는 '기본' (La)TeX 방법이 아닙니다.

TikZ나 PSTricks에서 이 작업을 수행하고 싶지만 둘 중 하나에 대해 아는 바가 없습니다. 이 프로젝트는 제가 배울 수 있는 기회가 될 것입니다. 나는 다이어그램을 모두 손으로 그린 ​​다음 힘들게 프로그래밍하는 것보다 계산 방법으로 다이어그램 코딩을 돕기 위해 모듈식 작업을 수행하고 싶습니다.

arXiv:1110.5542v1, 페이지 20

편집: canaaerus가 붙여넣은 예제를 살펴봐준 Tom Bombadil에게 감사합니다. 이는 가능한 시각적 복잡성의 좋은 예였지만 위에 링크된 PDF의 7페이지와 8페이지에 지정된 그래픽 요소가 함께 필요합니다. (이것은 내가 추구하는 바에 대한 완전한 기록을 남기기 위한 것입니다.)

여기에 이미지 설명을 입력하세요

답변1

여기에 개념이 있습니다.0번째의 답변TikZ의 트리플 라인.

코드

\documentclass{article}
\usepackage{tikz}

\begin{document}

\tikzset{
    triple/.style args={[#1] in [#2] in [#3]}{#1,preaction={preaction={draw,#3},draw,#2}},
    McCurdy/.style={triple={[line width=0.5pt,black] in [line width=2mm,red!30] in [line width=2mm+1pt,black]}},
}

\newcommand{\trapezium}[1]% shift as x,y (lower left corner)
{ \draw[fill=white,shift={(#1)}](0,0) -- (0.3,0) -- (0.3,0.8) -- (0,0.95) -- cycle;
}        

\begin{tikzpicture}
  \draw[McCurdy,rounded corners=1mm] (0,0) coordinate (start1) -- (5,0) -- (5,1) -- (2,1) -- (2,2) -- (2.5,2) -- (2.7,2.2) coordinate (end1);
  \draw[McCurdy,rounded corners=1mm] (2.9,2.4) coordinate (start2) -- (3.5,3) -- (7,3) coordinate (end2);
  \node[left] at (start1) {x};
  \trapezium{4,0.8}
  \trapezium{6,2.8}
  \pgfmathsetmacro{\xydim}{sqrt(2)/2*(1mm+0.5pt)/28.4528}
  \draw (end1) ++ (-\xydim,\xydim) -- ++ (2*\xydim,-2*\xydim);
  \draw (start2) ++ (-\xydim,\xydim) -- ++ (2*\xydim,-2*\xydim);
  \draw[rounded corners=1mm] (2.8,2.3) -- (2,3.1) -- (0.8,3.1)
    (2.8,2.3) -- (3.6,1.5) -- (4,1.5);
\end{tikzpicture}
\end{document}

출력

여기에 이미지 설명을 입력하세요


편집 1:"구멍"을 그리는 개념이지만 왼쪽에서 오른쪽으로 평행한 선에서만 상하로만 가능합니다. 기존 선 위에 그립니다.

여기에 이미지 설명을 입력하세요

코드

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\pgfmathsetmacro{\rlw}{0.2}
\pgfmathsetmacro{\blw}{0.02}

\pgfmathsetmacro{\hbw}{\blw/2}
\pgfmathsetmacro{\qbw}{\blw/4}
\pgfmathsetmacro{\hrw}{\rlw/2}

\tikzset{
    triple/.style args={[#1] in [#2] in [#3]}{#1,preaction={preaction={draw,#3},draw,#2}},
    McCurdy/.style={triple={[line width=\blw cm,black] in [line width=\rlw cm,red!30] in [line width=2*\blw cm+\rlw cm,black]}},
}

\newcommand{\trapezium}[1]% shift as x,y (lower left corner)
{ \draw[fill=white,shift={(#1)}](0,0) -- (0.3,0) -- (0.3,0.8) -- (0,0.95) -- cycle;
} 

\def\connector(#1,#2,#3)% midposition one, midposition two, radius
{   \path (#1);
    \pgfgetlastxy{\xtl}{\ytl}
    \path (#2);
    \pgfgetlastxy{\xbr}{\ybr}
    \pgfmathsetmacro{\xmin}{min(\xtl,\xbr)/28.453}
    \pgfmathsetmacro{\xmax}{max(\xtl,\xbr)/28.453}
    \pgfmathsetmacro{\ymin}{min(\ytl,\ybr)/28.453}
    \pgfmathsetmacro{\ymax}{max(\ytl,\ybr)/28.453}
    \fill[red!30] ($(\xmin,\ymax)+(-#3,-\hrw)$)
        arc (90:0:#3) -- 
        ($(\xmin,\ymin)+(0,#3+\hrw)$)
        arc (360:270:#3) --
        ($(\xmax,\ymin)+(#3,\hrw)$)
        arc (270:180:#3) --
        ($(\xmax,\ymax)+(0,-#3-\hrw)$)
        arc (180:90:#3) --
        cycle ;
    \draw[line width=\blw cm] ($(\xmin,\ymax)+(-#3,-\hrw)+(0,-\hbw)$)
        arc (90:0:#3) -- 
        ($(\xmin,\ymin)+(0,#3+\hrw+\hbw)$)
        arc (360:270:#3);
    \draw[line width=\blw cm] ($(\xmax,\ymax)+(#3,-\hrw)+(0,-\hbw)$)
        arc (90:180:#3) -- 
        ($(\xmax,\ymin)+(0,#3+\hrw+\hbw)$)
        arc (180:270:#3);   
}       

\begin{tikzpicture}
  \draw[McCurdy,rounded corners=1mm] (0,0) -- (1,0) coordinate (a) -- (3,0) coordinate (b) -- (4,0);
  \draw[McCurdy,rounded corners=1mm] (0,-1) -- (1.2,-1) coordinate (c) -- (2.7,-1) coordinate (d) -- (4,-1);
  \draw[McCurdy,rounded corners=1mm] (0,-2) -- (1.6,-2) coordinate (e) -- (2.0,-2) coordinate (f) -- (4,-2);
    \connector(a,c,0.15)
  \connector(b,d,0.2)
  \connector(c,e,0.05)
  \connector(d,f,0.1)
 \end{tikzpicture} 

\end{document}

출력

여기에 이미지 설명을 입력하세요

관련 정보