Espaciado de símbolos definidos en tikz.

Espaciado de símbolos definidos en tikz.

Así que he estado definiendo algunos símbolos nuevos con la ayuda de tikz. Mi objetivo es poder poner estos símbolos en tablas como estas: ingrese la descripción de la imagen aquí

Sin embargo, estas tablas deben leerse como una especie de diagramas de cadenas, por lo que me gustaría que los símbolos coincidan entre sí (por ejemplo, en la tabla de la izquierda, las líneas verticales de los dos símbolos deben estar enfrentadas). ¿Existe una buena manera de hacerlo?

Aquí está el código que produjo la imagen 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}

Respuesta1

El problema con las imágenes tikz es que una vez terminada la imagen, se recorta a su cuadro delimitador, por lo que una figura con una sola línea como \draw (0,0) -- (1,1);produce el mismo resultado que otra con una sola línea como \draw (1,1) -- (2,2);. El segundo no parece "desplazado".

Para posicionar correctamente tus líneas dentro de cada celda necesitas que cada tikzpicture tenga el mismo tamaño, lo que significa el mismo cuadro delimitador. Por ejemplo, si se define la siguiente macro:

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

y cada imagen tikz comienza con comando \bbox, luego su código produce la figura:

Resultado

Aún puedes ver que las líneas no se alinean como querías, pero esto se debe a que esas líneas no comienzan en (0,0), sino en (.5ex, 0)o (0, .5ex). No sé si esto es intencional, pero de todos modos el fondo amarillo hace que sea más fácil ver los "por qué" y ajustar el resultado según sea necesario.

Una vez que esté satisfecho con el resultado, puede eliminar la fill=yellowopción en la definición de \bbox. Los cuadros amarillos desaparecerán, pero la alineación permanece, ya que se utiliza el mismo cuadro delimitador:

Resultado final

Este es el código completo. Lo modifiqué un poco para producir esquinas adecuadas en las uniones y eliminé el borde \[alrededor \]de la tabla.

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

Respuesta2

No estoy seguro de las convenciones de nomenclatura, pero así es como las interpreté. Cambia los nombres, si lo prefieres.

No es necesario TikZ: picturetambién es bueno y aún más 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}

ingrese la descripción de la imagen aquí

Una variante con dos símbolos horizontales y dos verticales. La altura se adapta a la altura de la mayúscula en la fuente actual. Los glifos se vinculan bien entre sí. Si, en cambio, desea algunos cojinetes laterales, es fácil agregarlos.

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

ingrese la descripción de la imagen aquí

Respuesta3

Según su código, intenté hacer algo similar. Como me da pereza escribir, acorté los nombres de los comandos. También introduje dos nuevas líneas verticales u horizontales. Ambos tienen una línea blanca sobre fondo blanco, por lo que tienden a ser invisibles, pero utilizan la cantidad de espacio necesaria. Las variantes se diferencian por la posición de la línea visible en elyoizquierda orlado derecho de la alineación vertical o estar en eltop oblado inferior de la alineación horizontal.

Dicho esto, ahora puedes colocar casi cualquier combinación con alineación (espero).

Ah, como me da pereza escribir, también definí TikZ-stlyes y los usé.

Como puede ver, no necesita el 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 probar que funcionó:

ingrese la descripción de la imagen aquí

Respuesta4

Aquí creo los elementos superponiendo un blanco \rulesobre un negro \rule, compensado según sea necesario. Los elementos actualmente están definidos con \rlthkespesor y \boxsizetamaño. La forma de las macros es \X<horz><vert>, donde <horzpuede ser l, co r, y <vert>puede ser b, co 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}

ingrese la descripción de la imagen aquí

información relacionada