Linha pontilhada tabular de ponta a ponta: suprime o excesso, reduza o tamanho do ponto, alinhe os pontos às bordas

Linha pontilhada tabular de ponta a ponta: suprime o excesso, reduza o tamanho do ponto, alinhe os pontos às bordas

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 \hruleusado 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 tabularo ambiente. Além disso, por favor, não poste tikzoutros 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 \hruleque 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)) Captura de tela da saída

Responder1

Adaptado da minha resposta emLinha pontilhada em vez de \hline no ambiente de tabela, para incluir \xleadersem 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:

  1. rolamentos laterais especificados para o ponto foram contabilizados.

  2. Um kern final da coluna direita foi necessário para subtrair um \replengthda linha de chamada menos a largura do ponto (sem orientação lateral)

Os valores de \replengthe \dotscalepodem 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 \xleaderpara 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 \replengthe \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}

insira a descrição da imagem aqui

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}

Saída do código acima

Responder3

https://tex.stackexchange.com/a/332124/197451

Isso deve apontar você na direção certa

insira a descrição da imagem aqui

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

informação relacionada