tikz에 정의된 기호 간격

tikz에 정의된 기호 간격

그래서 나는 tikz의 도움으로 몇 가지 새로운 기호를 정의해 왔습니다. 내 목표는 이러한 기호를 다음과 같은 테이블에 넣을 수 있는 것입니다. 여기에 이미지 설명을 입력하세요

하지만 이 표들은 일종의 스트링 다이어그램으로 읽어야 하므로 기호가 서로 일치하도록 했으면 합니다(예를 들어 왼쪽 표에서는 두 기호의 수직선이 서로 마주해야 합니다). 그렇게 할 수 있는 좋은 방법이 있나요?

이전 그림을 생성한 코드는 다음과 같습니다.

\documentclass[preview,border=10pt]{standalone}
\usepackage{tikz}

\newcommand{\cornerur}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (0,0) -- (0,2ex);%
\draw[line width=.4mm] (0,0) -- (2ex,0);%
\end{tikzpicture}%
}


\newcommand{\cornerul}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (2ex,2ex) -- (2ex,0);%
\draw[line width=.4mm] (0,0) -- (2ex,0);%
\end{tikzpicture}%
}

\newcommand{\cornerdr}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (0,0) -- (0,2ex);%
\draw[line width=.4mm] (2ex,2ex) -- (0,2ex);%
\end{tikzpicture}%
}

\newcommand{\cornerdl}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (0,2ex) -- (2ex,2ex);%
\draw[line width=.4mm] (2ex,0) -- (2ex,2ex);%
\end{tikzpicture}%
}

\newcommand{\horiz}{%
\begin{tikzpicture}%
\node at (0,0) {}; {}%
\draw[line width=.4mm] (0,.5ex) -- (2ex,.5ex);%
\end{tikzpicture}%
}

\newcommand{\vertic}{%
\begin{tikzpicture}%
\draw[line width=.4mm] (.5ex,0) -- (.5ex,2ex);%
\end{tikzpicture}%
}

\begin{document}
\[
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{ | c | c | }
  \hline            
    $\cornerdr$ & $ \horiz $\\
  \hline
   $\vertic$ & $\cornerdr$ \\
  \hline  
\end{tabular}
\qquad
\begin{tabular}{ | c | }
  \hline            
   $\cornerdr$ \\ 
  \hline
   $ \cornerul $\\
  \hline  
\end{tabular}
\]
\end{document}

답변1

tikz 그림의 문제점은 그림이 완료되면 경계 상자에 잘려서 와 같은 한 줄이 있는 그림이 와 같은 \draw (0,0) -- (1,1);한 줄이 있는 다른 그림과 동일한 결과를 생성한다는 것 입니다 \draw (1,1) -- (2,2);. 두 번째는 "이동"된 것으로 보이지 않습니다.

각 셀 내부에 선을 올바르게 배치하려면 각 tikzpicture의 크기가 동일해야 합니다. 이는 동일한 경계 상자를 의미합니다. 예를 들어 다음 매크로가 정의된 경우:

\def\bbox{\path[fill=yellow, use as bounding box] (0,0) rectangle(2ex,2ex);}

각 tikz 그림은 command 로 시작 \bbox하고 코드는 그림을 생성합니다.

결과

선이 원하는 대로 정렬되지 않은 것을 볼 수 있지만 이는 해당 선이 에서 시작하지 않고 (0,0)또는 (.5ex, 0)대신 에 시작되기 때문입니다 (0, .5ex). 이것이 의도적인지는 모르겠지만 어쨌든 노란색 배경을 사용하면 "이유"를 더 쉽게 확인하고 필요에 따라 결과를 조정할 수 있습니다.

결과에 만족하면 fill=yellow정의에서 옵션을 제거할 수 있습니다 \bbox. 노란색 상자는 사라지지만 동일한 경계 상자가 사용되므로 정렬은 유지됩니다.

최종 결과

전체 코드입니다. 접합부에서 적절한 모서리를 만들기 위해 약간 변경하고 표 주위의 \[을 제거했습니다.\]

\documentclass[preview,border=10pt]{standalone}
\usepackage{tikz}

\def\bbox{\path[use as bounding box] (0,0) rectangle(2ex,2ex);}

\newcommand{\cornerur}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (2ex,0) -- (0,0) -- (0,2ex);%
\end{tikzpicture}%
}


\newcommand{\cornerul}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (2ex,2ex) -- (2ex,0) -- (0,0);%
\end{tikzpicture}%
}

\newcommand{\cornerdr}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (2ex,2ex) -- (0,2ex) -- (0,0);%
\end{tikzpicture}%
}

\newcommand{\cornerdl}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (0,2ex) -- (2ex,2ex) -- (2ex,0);%
\end{tikzpicture}%
}

\newcommand{\horiz}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (0,.5ex) -- (2ex,.5ex);%
\end{tikzpicture}%
}

\newcommand{\vertic}{%
\begin{tikzpicture}%
\bbox
\draw[line width=.4mm] (.5ex,0) -- (.5ex,2ex);%
\end{tikzpicture}%
}

\begin{document}
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{ | c | c | }
  \hline            
    $\cornerdr$ & $ \horiz $\\
  \hline
   $\vertic$ & $\cornerdr$ \\
  \hline  
\end{tabular}
\qquad
\begin{tabular}{ | c | }
  \hline            
   $\cornerdr$ \\ 
  \hline
   $ \cornerul $\\
  \hline  
\end{tabular}
\end{document}

답변2

명명 규칙이 확실하지 않지만 여기에는 이를 해석한 방법이 나와 있습니다. 원하는 경우 이름을 변경하세요.

TikZ가 필요하지 않습니다. picture더 좋고 더 쉽습니다.

\documentclass{article}
\usepackage{pict2e}

\linethickness{1pt}
\roundcap\roundjoin

\newcommand{\cornerur}{%
  \begingroup\setlength{\unitlength}{2ex}% current font
  \begin{picture}(1,1)
  \roundcap
  \polyline(1,0)(1,1)(0,1)
  \end{picture}%
  \endgroup
}

\newcommand{\cornerul}{%
  \begingroup\setlength{\unitlength}{2ex}% current font
  \begin{picture}(1,1)
  \polyline(0,0)(0,1)(1,1)
  \end{picture}%
  \endgroup
}

\newcommand{\cornerdr}{%
  \begingroup\setlength{\unitlength}{2ex}% current font
  \begin{picture}(1,1)
  \polyline(0,0)(1,0)(1,1)
  \end{picture}%
  \endgroup
}

\newcommand{\cornerdl}{%
  \begingroup\setlength{\unitlength}{2ex}% current font
  \begin{picture}(1,1)
  \polyline(0,1)(0,0)(1,0)
  \end{picture}%
  \endgroup
}

\newcommand{\horiz}{%
  \begingroup\setlength{\unitlength}{2ex}% current font
  \begin{picture}(1,1)
  \polyline(0,1)(1,1)
  \end{picture}%
  \endgroup
}

\newcommand{\vertic}{%
  \begingroup\setlength{\unitlength}{2ex}% current font
  \begin{picture}(1,1)
  \polyline(0,0)(0,1)
  \end{picture}%
  \endgroup
}

\begin{document}
\begin{center}
\verb|\cornerur|: \cornerur\\
\verb|\cornerul|: \cornerul\\
\verb|\cornerdr|: \cornerdr\\
\verb|\cornerdl|: \cornerdl
\end{center}

\[
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{ | c | c | }
  \hline            
    \cornerdr &  \horiz \\
  \hline
   \vertic & \cornerdr \\
  \hline  
\end{tabular}
\qquad
\begin{tabular}{ | c | }
  \hline            
   \cornerdr \\ 
  \hline
    \cornerul \\
  \hline  
\end{tabular}
\]

\end{document}

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

두 개의 수평 기호와 두 개의 수직 기호가 있는 변형입니다. 높이는 현재 글꼴의 대문자 높이에 맞게 조정됩니다. 글리프는 서로 잘 연결됩니다. 대신 측면 베어링이 필요한 경우 쉽게 추가할 수 있습니다.

\documentclass{article}
\usepackage{pict2e}

\newcommand{\skysurf}[1]{%
  \begingroup
  \setlength{\unitlength}{\fontcharht\font`A}%
  \linethickness{1pt}\roundcap\roundjoin
  \begin{picture}(1,1)
  \polyline#1
  \end{picture}%
  \endgroup
}

\newcommand{\cornerur}{\skysurf{(1,0)(1,1)(0,1)}}
\newcommand{\cornerul}{\skysurf{(0,0)(0,1)(1,1)}}
\newcommand{\cornerdr}{\skysurf{(0,0)(1,0)(1,1)}}
\newcommand{\cornerdl}{\skysurf{(0,1)(0,0)(1,0)}}
\newcommand{\horizd}  {\skysurf{(0,0)(1,0)}}
\newcommand{\horizu}  {\skysurf{(0,1)(1,1)}}
\newcommand{\verticl} {\skysurf{(0,0)(0,1)}}
\newcommand{\verticr} {\skysurf{(1,0)(1,1)}}

\begin{document}

\begin{tabular}{ccc}
\cornerul & \horizu & \cornerur\\
\verticl & & \verticr \\
\cornerdl & \horizd & \cornerdr\\
\end{tabular}

\bigskip

ABC \cornerul \horizu \cornerur \verticl \verticr \cornerdl \horizd \cornerdr

\bigskip

\begingroup\setlength{\tabcolsep}{0pt}\renewcommand{\arraystretch}{0}
\begin{tabular}{ccc}
\cornerul & \horizu & \cornerur\\
\verticl & & \verticr \\
\cornerdl & \horizd & \cornerdr\\
\end{tabular}
\endgroup

\end{document}

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

답변3

귀하의 코드를 기반으로 비슷한 작업을 시도했습니다. 타이핑이 귀찮아서 명령 이름을 줄였습니다. 또한 두 개의 새로운 수직 또는 수평선을 도입했습니다. 둘 다 흰색 배경에 흰색 선이 있어 눈에 띄지 않는 경향이 있지만 필요한 만큼의 공간을 사용합니다. 변형은 보이는 선의 위치가 다릅니다.동쪽 또는아르 자형종단선형의 오른쪽 측면에 있거나 수직선형의 오른쪽에 있는 경우op 또는수평선형의 아래쪽.

그렇긴 하지만 이제 정렬을 사용하여 거의 모든 조합을 배치할 수 있습니다(희망합니다).

아, 타이핑이 귀찮아서 TikZ-stlyes도 정의해서 사용했어요.

보시다시피 수학 모드가 필요하지 않습니다.

\documentclass[preview,border=10pt]{standalone}
\usepackage{tikz}

\tikzset{my style/.style={line width=.4mm}, blind/.style={white}}

\newcommand{\ur}{%
  \begin{tikzpicture}%
    \draw[my style] (2ex,0) -- (0,0) -- (0,2ex);%
  \end{tikzpicture}%
}

\newcommand{\ul}{%
  \begin{tikzpicture}%
    \draw[my style] (2ex,2ex) -- (2ex,0) -- (0,0);%
  \end{tikzpicture}%
}

\newcommand{\dr}{%
  \begin{tikzpicture}%
    \draw[my style] (0,0) -- (0,2ex) -- (2ex,2ex);%
  \end{tikzpicture}%
}

\newcommand{\dl}{%
  \begin{tikzpicture}%
    \draw[my style] (0,2ex) -- (2ex,2ex) -- (2ex,0);%
  \end{tikzpicture}%
}

\newcommand{\hb}{%
  \begin{tikzpicture}%
    \draw[my style] (0,0) -- (2ex,0);%
    \draw[blind] (0,0) -- (0,2ex);%
\end{tikzpicture}%
}

\newcommand{\hh}{%
  \begin{tikzpicture}%
    \draw[my style] (0,2ex) -- (2ex,2ex);%
    \draw[blind] (0,0) -- (0,2ex);%
\end{tikzpicture}%
}

\newcommand{\vl}{%
  \begin{tikzpicture}%
    \draw[my style] (0,0) -- (0,2ex);%
    \draw[blind] (0,0) -- (2ex,0);%
  \end{tikzpicture}%
}

\newcommand{\vr}{%
  \begin{tikzpicture}%
    \draw[my style] (2ex,0) -- (2ex,2ex);%
    \draw[blind] (0,0) -- (2ex,0);%
  \end{tikzpicture}%
}

\begin{document}

Using \verb!\fbox!-commands:
\fbox{\ur}\fbox{\hb}

This is the old style, without math mode. 
\renewcommand{\arraystretch}{1.5}
\begin{tabular}{ | c | c | }
  \hline            
    \dr &  \hh \\
  \hline
   \vl & \dr \\
  \hline  
\end{tabular}
\quad
\begin{tabular}{ | c |c | c |}
  \hline            
  \dr & \hh & \dl\\ 
  \hline
  \vl &  & \vr \\
  \hline
  \ur & \hb & \ul\\
  \hline  
\end{tabular}
\end{document}

그것이 효과가 있다는 것을 증명하기 위해:

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

답변4

여기에서는 필요에 따라 \rule검정색 위에 흰색을 겹쳐서 요소를 만듭니다 . \rule요소는 현재 \rlthk두께와 \boxsize크기로 정의되어 있습니다. 매크로의 형식은 입니다 \X<horz><vert>. 여기서는 , 또는 일 <horz수 있으며 , 또는 일 수 있습니다 .lcr<vert>bct

\documentclass[12pt]{article}
\usepackage{stackengine,xcolor}
\def\rlthk{\dimexpr1pt\relax}
\def\boxsize{\dimexpr1ex\relax}
\def\blbox{\rule{\boxsize}{\boxsize}}
\def\whbox{\textcolor{white}{\blbox}}
%
\def\Xrt{\kern-\rlthk\stackinset{r}{\rlthk}{t}{\rlthk}{\whbox}{\blbox}}
\def\Xlt{\stackinset{l}{\rlthk}{t}{\rlthk}{\whbox}{\blbox}\kern-\rlthk}
\def\Xrb{\kern-\rlthk\stackinset{r}{\rlthk}{b}{\rlthk}{\whbox}{\blbox}}
\def\Xlb{\stackinset{l}{\rlthk}{b}{\rlthk}{\whbox}{\blbox}\kern-\rlthk}
%
\def\Xtt{\stackinset{c}{}{t}{\rlthk}{\whbox}{\blbox}}
\def\Xll{\stackinset{l}{\rlthk}{c}{}{\whbox}{\blbox}\kern-\rlthk}
\def\Xbb{\stackinset{c}{}{b}{\rlthk}{\whbox}{\blbox}}
\def\Xrr{\kern-\rlthk\stackinset{r}{\rlthk}{c}{}{\whbox}{\blbox}}
\begin{document}
Building blocks:\par
\Xlt{} \Xtt{} \Xrt\par
\Xll{} \hspace{\boxsize} \Xrr\par
\Xlb{} \Xbb{} \Xrb

\begin{tabular}{|c|c|}
\hline
\Xlt & \Xtt\\
\hline
\Xll & \Xlt\\
\hline
\end{tabular}
\quad%
\begin{tabular}{|c|}
\hline
\Xlt \\
\hline
\Xrb\\
\hline
\end{tabular}
\end{document}

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

관련 정보