Estoy intentando agregar una línea de puntos desde el borde izquierdo al borde derecho de la tabla después de las filas. Hay 3 problemas con mi mejor intento (código y captura de pantalla a continuación): 1) La longitud de la línea de puntos es igual al ancho de la minipágina en lugar de la tabla, 2) Los puntos no comienzan exactamente en el borde izquierdo de la tabla (hay un ligero espacio), 3) La reducción del tamaño de los puntos también cambia el punto inicial de la línea de puntos, lo que hace que los puntos iniciales de las líneas con diferentes tamaños de puntos no coincidan aún más (me gustaría tener líneas con diferentes tamaños de puntos, pero todas comenzando y terminando en el mismo borde). El borde izquierdo del punto más a la izquierda debe tocar el borde izquierdo de la tabla (tal como \hrule
se usó en la primera línea), y el borde derecho del punto más a la derecha debe tocar el borde derecho de la mesa. Estoy usando lualatex
.
NOTA: Me he encontrado con trucos en el intercambio de pilas que usan guiones en lugar de puntos. Estoy buscando puntos, así que no publique ninguna respuesta con guiones. Además, por ahora no puedo pasar a otro entorno, por lo que tiene que ser una solución para tabular
el entorno. Además, no publiques tikz
ni realices otros trucos de dibujo lento. Si no queda claro en la descripción: no tengo la intención de especificar manualmente la longitud de la tabla como n pt/cm/in
, la solución sería capaz de calcular la longitud de la tabla como la que \hrule
uso para la primera línea. Por último: dado el énfasis en el etiquetado y la accesibilidad de PDF en TUG 2020, lo ideal es que la solución no haga que la utilidad de conversión de texto a voz de accesibilidad a PDF comience a decir 'punto punto punto punto...' un millón de veces.
Código:
% >> lualatex table.tex
\documentclass[notitlepage,letterpaper]{article}
\usepackage{array}
\begin{document}
\begin{minipage}[t][1in][t]{3in}
Hello world!\\
\begin{tabular}[t]{@{}rll@{}}
\noalign{\hrule height 0.5pt}
a & some & text \\
\noalign{\dotfill}
b & some & other text \\
\noalign{\dotfill}
b & some more & text \\
\noalign{\dotfill}
\end{tabular}%
\end{minipage}
\end{document}
Captura de pantalla: (Tengo la intención de comenzar una línea de puntos de menor tamaño desde el borde izquierdo del cuadro rojo y terminarla en el borde derecho (idealmente los puntos tocan el borde))
Respuesta1
Adaptado de mi respuesta enLínea de puntos en lugar de \hline en el entorno de tabla, para incluir \xleaders
en lugar de \leaders
, para mejorar el nivel y para proporcionar una inclusión opcional de puntos para el margen de cada columna, lo que permite su uso con @{}
especificaciones de margen de columna. Además, ahora funciona para más de 2 columnas tabular
.
En un esfuerzo por hacer coincidir mejor los márgenes izquierdo y derecho, se realizaron dos EDICIONES adicionales a la adaptación:
Se tuvieron en cuenta los apoyos laterales especificados hasta el punto.
Se requirió un último kern en la columna derecha para restar uno
\replength
del líder menos el ancho del punto (sin rodamiento lateral)
Los valores de \replength
y \dotscale
se pueden cambiar columna por columna, si se desea. Desafortunadamente, no puedo construir los puntos como un solo líder, sino que debo manejarlos columna por columna. Como uso \xleader
para lograr el nivelado, esto significa que la separación de puntos en cada columna será ligeramente diferente, según el ancho de la columna y los valores de \replength
y \tabcolsep
.
\documentclass{article}
\usepackage{graphicx}
\newlength\replength
\setlength\replength{1.3pt}% HORIZONTAL DOT SEP
\newcommand\dotscale{.5}% SCALES DOT SIZE
\newcommand\sidebearing{.9pt}% DOT'S SIDEBEARING
\newsavebox\mydot
\newcommand\tdotfill[1][\repfrac]{\xleaders\hbox to \replength{%
\smash{\raisebox{\arraystretch\dimexpr\ht\strutbox-.1ex\relax}%
{\usebox{\mydot}}}}%
\hfill}
\newcommand\tdotleft[1][\tabcolsep]{%
\makebox[0pt][r]{\makebox[#1]{\tdotfill}}}
\newcommand\tdotright[1][\tabcolsep]{%
\makebox[0pt][l]{\makebox[#1]{\tdotfill}}}
\newcommand\tabdotline[1][Q]{%
\savebox\mydot{%
\scalebox{\dotscale}{\kern-\sidebearing.\kern-\sidebearing}}%
\ifx l#1\relax\tdotleft\tdotfill\else
\ifx r#1\relax\tdotfill\tdotright\else
\ifx \relax#1\relax\tdotfill\else
\tdotleft\tdotfill\tdotright
\fi\fi\fi\mbox{}}
\newcommand\dotend{\unskip\kern\dimexpr\wd\mydot-\replength\relax
\\[-\arraystretch\dimexpr\ht\strutbox+\dp\strutbox\relax]}
\begin{document}
\begin{minipage}[t][1in][t]{3in}
Hello world!\\
\begin{tabular}[t]{@{}rll@{}}
\noalign{\hrule height 0.5pt}
a & some & text \\
\tabdotline[r] & \tabdotline &\tabdotline[l] \dotend
b & some & other text \\
\tabdotline[r] & \tabdotline &\tabdotline[l] \dotend
b & some more & text \\
\tabdotline[r] & \tabdotline &\tabdotline[l] \dotend
\end{tabular}%
\end{minipage}
\end{document}
Respuesta2
Esto es lo que puedes hacer {NiceTabular}
con nicematrix
. Ese entorno es similar a {tabular}
(of array
) pero agrega nodos PGF/Tikz debajo de las filas, celdas y columnas de la matriz.
Es posible utilizar esos nodos para dibujar reglas de puntos con Tikz.
\documentclass[notitlepage,letterpaper]{article}
\usepackage{nicematrix}
\usepackage{tikz}
\begin{document}
\ExplSyntaxOn
\makeatletter
\NewDocumentCommand { \mydottedline } { }
{
\tl_gput_right:Nx \g_nicematrix_code_after_tl
{
\exp_not:N \tikz [dotted]
\exp_not:N \draw (\int_use:N \c@iRow -| 1 )
-- (\int_use:N \c@iRow -|\exp_not:N \int_eval:n { \c@jCol + 1 } ) ;
}
}
\makeatother
\ExplSyntaxOff
\begin{minipage}[t][1in][t]{3in}
Hello world!\\
\begin{NiceTabular}[t]{@{}rll@{}}
\noalign{\hrule height 0.5pt}
a & some & text \\
\mydottedline
b & some & other text \\
\mydottedline
b & some more & text \\
\mydottedline
\end{NiceTabular}%
\end{minipage}
\end{document}
Respuesta3
https://tex.stackexchange.com/a/332124/197451
Esto debería indicarle la dirección correcta
\documentclass{article}
\newcommand\fillin[1][3cm]{\makebox[#1]{\dotfill}}
\begin{document}
Why appropriate, specify? \fillin\\
Why inappropriate, specify? \fillin[4cm]\\
Why appropriate, specify? \dotfill\\
Why inappropriate, specify? \fillin[2cm]
\end{document}