Tabellarische gepunktete Linie von Rand zu Rand: Überschwingen unterdrücken, Punktgröße reduzieren, Punkte an Rändern ausrichten

Tabellarische gepunktete Linie von Rand zu Rand: Überschwingen unterdrücken, Punktgröße reduzieren, Punkte an Rändern ausrichten

Ich versuche, nach den Zeilen eine gepunktete Linie vom linken zum rechten Rand der Tabelle hinzuzufügen. Bei meinem besten Versuch gibt es 3 Probleme (Code und Screenshot unten): 1) Die Länge der gepunkteten Linie entspricht der Breite der Miniseite statt der Tabelle, 2) Die Punkte beginnen nicht genau am linken Rand der Tabelle (es gibt eine kleine Lücke), 3) Durch die Reduzierung der Punktgröße ändert sich auch der Startpunkt der gepunkteten Linie, wodurch die Startpunkte von Linien mit unterschiedlichen Punktgrößen noch weiter voneinander abweichen (ich hätte gerne Linien mit unterschiedlichen Punktgrößen, die aber alle am selben Rand beginnen und enden). Der linke Rand des äußersten linken Punkts sollte den linken Rand der Tabelle berühren (genau wie \hrulein der ersten Zeile verwendet) und der rechte Rand des äußersten rechten Punkts sollte den rechten Rand der Tabelle berühren. Ich verwende lualatex.

HINWEIS: Ich bin bei Stack Exchange auf Hacks gestoßen, die Bindestriche statt Punkte verwenden. Ich suche nach Punkten, also posten Sie bitte keine Antworten mit Bindestrichen. Außerdem kann ich im Moment nicht in eine andere Umgebung wechseln, also muss es eine Lösung für die tabularUmgebung geben. Außerdem posten Sie bitte keine tikzoder andere langsame Zeichentricks. Falls es aus der Beschreibung nicht klar hervorgeht: Ich habe nicht vor, die Länge der Tabelle manuell anzugeben n pt/cm/in, wie , die Lösung könnte die Länge der Tabelle genauso ermitteln, wie \hruleich sie für die erste Zeile verwende. Und schließlich: In Anbetracht der Betonung von PDF-Tagging und -Zugänglichkeit in TUG 2020 wird die Lösung im Idealfall nicht dazu führen, dass das Text-to-Speech-Dienstprogramm für PDF-Zugänglichkeit zigmal „Punkt Punkt Punkt Punkt Punkt …“ spricht.

Code:

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

Screenshot: (Ich möchte mit einer kleineren gepunkteten Linie am linken Rand des roten Kästchens beginnen und sie am rechten Rand beenden (idealerweise berühren die Punkte den Rand)). Screenshot der Ausgabe

Antwort1

Angepasst an meine Antwort unterGepunktete Linie statt \hline in Tabellenumgebung, um include \xleadersstatt zu verwenden \leaders, für eine bessere Bündigkeit und um optional Punkte für den Rand jeder Spalte einzuschließen, sodass es mit @{}Spaltenrandspezifikationen verwendet werden kann. Außerdem funktioniert es jetzt für mehr als ein 2-Spalten tabular.

Um die linken und rechten Ränder besser aufeinander abzustimmen, wurden zwei weitere BEARBEITUNGEN an der Anpassung vorgenommen:

  1. Die angegebenen Seitenränder wurden auf den Punkt genau berücksichtigt.

  2. \replengthEin letzter Kern in der rechten Spalte war erforderlich, um eins des Füllzeichens abzüglich der Breite des (seitenrandfreien) Punkts abzuziehen .

Die Werte von \replengthund \dotscalekönnen bei Bedarf spaltenweise geändert werden. Leider kann ich die Punkte nicht als einzelnes Füllzeichen konstruieren, sondern muss sie spaltenweise behandeln. Da ich verwende, um Bündigkeit zu erreichen, bedeutet dies, dass der Punktabstand in jeder Spalte je nach Spaltenbreite und den Werten von und \xleaderleicht unterschiedlich ist .\replength\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}

Bildbeschreibung hier eingeben

Antwort2

Folgendes können Sie mit {NiceTabular}of tun nicematrix. Diese Umgebung ähnelt {tabular}(of array), fügt jedoch PGF/Tikz-Knoten unter den Zeilen, Zellen und Spalten des Arrays hinzu.

Es ist möglich, diese Knoten zu verwenden, um mit Tikz gepunktete Linien zu zeichnen.

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

Ausgabe des obigen Codes

Antwort3

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

Dies sollte Sie in die richtige Richtung weisen

Bildbeschreibung hier eingeben

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

verwandte Informationen