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 \hrule
in 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 tabular
Umgebung geben. Außerdem posten Sie bitte keine tikz
oder 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 \hrule
ich 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)).
Antwort1
Angepasst an meine Antwort unterGepunktete Linie statt \hline in Tabellenumgebung, um include \xleaders
statt 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:
Die angegebenen Seitenränder wurden auf den Punkt genau berücksichtigt.
\replength
Ein letzter Kern in der rechten Spalte war erforderlich, um eins des Füllzeichens abzüglich der Breite des (seitenrandfreien) Punkts abzuziehen .
Die Werte von \replength
und \dotscale
kö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 \xleader
leicht 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}
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}
Antwort3
https://tex.stackexchange.com/a/332124/197451
Dies sollte Sie in die richtige Richtung weisen
\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}