Estou tentando adicionar uma linha pontilhada da borda esquerda à borda direita da tabela após as linhas. Existem 3 problemas com minha melhor tentativa (código e captura de tela abaixo): 1) O comprimento da linha pontilhada é igual à largura da minipágina em vez da tabela, 2) Os pontos não começam exatamente na borda esquerda da tabela (há uma pequena lacuna), 3) Reduzir o tamanho do ponto também altera o ponto inicial da linha pontilhada, incompatível ainda mais com os pontos iniciais das linhas com tamanhos de pontos diferentes (eu gostaria de ter linhas com tamanhos de pontos diferentes, mas todas começando e terminando no mesmo borda). A borda esquerda do ponto mais à esquerda deve tocar a borda esquerda da tabela (exatamente como \hrule
usado na primeira linha), e a borda direita do ponto mais à direita deve tocar a borda direita da tabela. Estou usando lualatex
.
NOTA: Encontrei hacks na troca de pilhas que usam traços em vez de pontos. Estou procurando pontos, então, por favor, não poste nenhuma resposta de traço. Além disso, não posso mudar para outro ambiente por enquanto, então tem que ser uma solução para tabular
o ambiente. Além disso, por favor, não poste tikz
outros truques de desenho lento. Se não estiver claro na descrição: não pretendo especificar manualmente o comprimento da tabela como n pt/cm/in
, a solução seria capaz de descobrir o comprimento da tabela exatamente como o \hrule
que uso para a primeira linha. Por último: Dada a ênfase na marcação e acessibilidade de PDF no TUG 2020, a solução idealmente não fará com que o utilitário de conversão de texto em fala com acessibilidade de PDF comece a falar 'ponto ponto ponto ponto ponto...' um zilhão de vezes.
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 tela: (pretendo começar uma linha pontilhada de tamanho menor na borda esquerda da caixa vermelha e terminá-la na borda direita (de preferência, os pontos tocando a borda))
Responder1
Adaptado da minha resposta emLinha pontilhada em vez de \hline no ambiente de tabela, para incluir \xleaders
em vez de \leaders
, para melhorar o alinhamento e para fornecer uma inclusão opcional de pontos para a margem de cada coluna, permitindo que seja usado com @{}
especificações de margem de coluna. Além disso, agora funciona para mais de 2 colunas tabular
.
Em um esforço para combinar melhor as margens esquerda e direita, duas EDIÇÕES adicionais foram feitas na adaptação:
rolamentos laterais especificados para o ponto foram contabilizados.
Um kern final da coluna direita foi necessário para subtrair um
\replength
da linha de chamada menos a largura do ponto (sem orientação lateral)
Os valores de \replength
e \dotscale
podem ser alterados coluna por coluna, se desejado. Infelizmente, não posso construir os pontos como um único líder, mas devo lidar com isso coluna por coluna. Como eu uso \xleader
para obter brilho, isso significa que a separação de pontos em cada coluna será um pouco diferente, com base na largura da coluna e nos valores de \replength
e \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}
Responder2
Aqui está o que você pode fazer com {NiceTabular}
of nicematrix
. Esse ambiente é semelhante a {tabular}
(of array
), mas adiciona nós PGF/Tikz nas linhas, células e colunas da matriz.
É possível usar esses nós para desenhar regras pontilhadas com 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}
Responder3
https://tex.stackexchange.com/a/332124/197451
Isso deve apontar você na direção certa
\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}