Espaçamento de símbolos definido em tikz

Espaçamento de símbolos definido em tikz

Então, tenho definido alguns novos símbolos com a ajuda do tikz. Meu objetivo é poder colocar esses símbolos em tabelas como estas: insira a descrição da imagem aqui

No entanto, essas tabelas devem ser lidas como uma espécie de diagrama de strings, então eu gostaria que os símbolos correspondessem entre si (por exemplo, na tabela da esquerda, as linhas verticais dos dois símbolos deveriam estar voltadas uma para a outra). Existe uma boa maneira de fazer isso?

Aqui está o código que produziu a imagem anterior:

\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}

Responder1

O problema com as imagens tikz é que, uma vez concluída a imagem, ela é recortada em sua caixa delimitadora, de modo que uma figura com uma única linha como \draw (0,0) -- (1,1);produz o mesmo resultado que outra com uma única linha como \draw (1,1) -- (2,2);. O segundo não parece “deslocado”.

Para posicionar corretamente suas linhas dentro de cada célula, você precisa que cada imagem tikz tenha o mesmo tamanho, o que significa a mesma caixa delimitadora. Por exemplo, se a seguinte macro for definida:

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

e cada imagem tikz começa com command \bbox, então seu código produz a figura:

Resultado

Você ainda pode ver que as linhas não estão alinhadas como você queria, mas isso ocorre porque essas linhas não começam em (0,0), mas em (.5ex, 0)ou (0, .5ex). Não sei se isso é intencional, mas de qualquer forma o fundo amarelo facilita ver os "porquês" e ajustar o resultado conforme necessário.

Quando estiver satisfeito com o resultado, você pode remover a fill=yellowopção na definição de \bbox. As caixas amarelas desaparecerão, mas o alinhamento permanecerá, pois será utilizada a mesma caixa delimitadora:

Resultado final

Este é o código completo. Alterei um pouco para produzir cantos adequados nas junções e remova o \[, \]ao redor da tabular.

\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}

Responder2

Não tenho certeza das convenções de nomenclatura, mas aqui está como as interpretei. Mude os nomes, se preferir.

Não há necessidade de TikZ: picturetambém é bom e ainda mais fácil.

\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}

insira a descrição da imagem aqui

Uma variante com dois símbolos horizontais e dois verticais. A altura é adaptada à altura maiúscula da fonte atual. Os glifos se conectam bem. Se você quiser alguns rolamentos laterais, é fácil adicioná-los.

\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}

insira a descrição da imagem aqui

Responder3

Com base no seu código, tentei fazer algo semelhante. Com preguiça de digitar, encurtei os nomes dos seus comandos. Também introduzi duas novas linhas verticais ou horizontais. Ambos têm uma linha branca sobre fundo branco, portanto tendem a ser invisíveis, mas ocupam a quantidade necessária de espaço. As variantes diferem na posição da linha visível noeuesquerda ouRlado direito do alinhamento vertical ou estar notoperação oublado inferior do alinhamento horizontal.

Dito isto, agora você pode colocar quase qualquer combinação com alinhamento (espero).

Ah, com preguiça de digitar, também defini estilos TikZ e os usei.

Como você pode ver, você não precisa do modo matemático.

\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}

Para provar que funcionou:

insira a descrição da imagem aqui

Responder4

Aqui eu crio os elementos sobrepondo um branco \rulesobre um preto \rule, deslocando conforme necessário. Os elementos estão atualmente definidos com \rlthkespessura e \boxsizetamanho. A forma das macros é \X<horz><vert>, onde <horzpode ser l,, cou r, e <vert>pode ser b,, cou t.

\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}

insira a descrição da imagem aqui

informação relacionada