表格邊到邊虛線:抑制過衝、減小網點尺寸、將網點與邊緣對齊

表格邊到邊虛線:抑制過衝、減小網點尺寸、將網點與邊緣對齊

我正在嘗試在行後表格的左邊緣到右邊緣添加虛線。我的最佳嘗試有 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.

為了更好地匹配左右邊距,對改編進行了兩項額外的編輯:

  1. 考慮了該點的指定側向。

  2. 需要最後的右列緊排來減去\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}

相關內容