我正在嘗試在行後表格的左邊緣到右邊緣添加虛線。我的最佳嘗試有 3 個問題(下面的程式碼和螢幕截圖):1)虛線的長度等於小頁而不是表格的寬度,2)這些點並不完全從表格的左邊緣開始(有輕微的間隙),3)減少點大小也會改變虛線的起點,進一步使具有不同點大小的線的起點不匹配(我想要具有不同點大小的線,但所有線的開始和結束都相同邊緣)。最左邊的點的左邊緣應該接觸表格的左邊緣(就像\hrule
第一行上使用的),最右邊的點的右邊緣應該接觸表格的右邊緣。我在用lualatex
。
注意:我在堆疊交換中遇到過使用破折號而不是點的駭客,我正在尋找點,所以請不要發布任何破折號答案。另外,我現在無法轉移到另一個環境,所以它必須是tabular
環境的解決方案。另外,請不要發文tikz
或其他緩慢的繪圖技巧。如果描述不清楚:我不打算像這樣手動指定表長度的長度n pt/cm/in
,解決方案將能夠計算出表的長度,就像\hrule
我在第一行中使用的那樣。最後:鑑於 TUG 2020 中對 PDF 標記和可訪問性的強調,理想情況下,該解決方案不會使 pdf-accessibility 文本轉語音實用程式開始無數次地說「點點點點...」。
代碼:
% >> 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}
答案1
改編自我的回答表環境中以虛線取代 \hline,包含\xleaders
而不是,以提高齊平度,並為每列邊距提供可選的點包含,允許其與列邊距規範\leaders
一起使用。@{}
此外,它現在適用於超過 2 列的tabular
.
為了更好地匹配左右邊距,對改編進行了兩項額外的編輯:
考慮了該點的指定側向。
需要最後的右列緊排來減去
\replength
前導之一減去(無側軸承)點的寬度
如果需要,可以逐列更改\replength
和的值。\dotscale
不幸的是,我無法將這些點建構為單一領導者,而是必須逐列處理它。由於我用於實現齊平,這意味著每列中的點間距將略有不同,具體取決於列寬以及和\xleader
的值。\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}
答案2
以下是您可以使用{NiceTabular}
of執行的操作nicematrix
。該環境與{tabular}
(of )類似,array
但在數組的行、單元格和列下添加了 PGF/Tikz 節點。
可以使用該節點透過 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}
答案3
https://tex.stackexchange.com/a/332124/197451
這應該為您指引正確的方向
\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}