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:
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:
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=yellow
opció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:
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: picture
tambié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}
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}
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ó:
Respuesta4
Aquí creo los elementos superponiendo un blanco \rule
sobre un negro \rule
, compensado según sea necesario. Los elementos actualmente están definidos con \rlthk
espesor y \boxsize
tamaño. La forma de las macros es \X<horz><vert>
, donde <horz
puede ser l
, c
o r
, y <vert>
puede ser b
, c
o 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}