表形式の端から端までの点線: オーバーシュートを抑制し、ドットサイズを縮小し、ドットを端に揃えます

表形式の端から端までの点線: オーバーシュートを抑制し、ドットサイズを縮小し、ドットを端に揃えます

行の後に表の左端から右端まで点線を追加しようとしています。最善の試み (コードとスクリーンショットは下記) には 3 つの問題があります。1) 点線の長さが表ではなくミニページの幅に等しい、2) 点が表の左端から正確に始まっていない (わずかな隙間がある)、3) 点のサイズを小さくすると点線の開始点も変わり、異なる点のサイズを持つ線の開始点がさらに一致しなくなる (異なる点のサイズを持つ線が欲しいが、すべて同じ端で始まって終わる)。左端の点の左端は表の左端に接する必要があり (最初\hruleの行で使用されているように)、右端の点の右端は表の右端に接する必要があります。私は を使用していますlualatex

注: Stack Exchange でドットの代わりにダッシュを使用するハックに遭遇しましたが、ドットを探しているので、ダッシュの回答は投稿しないでください。また、今のところ別の環境に移動できないため、tabular環境のソリューションである必要があります。また、投稿したり、他の遅い描画トリックをしたりしないでくださいtikz。説明から明らかでない場合: のようにテーブルの長さを手動で指定するつもりはありませんn pt/cm/in。ソリューションは、最初の行に使用する と同じようにテーブルの長さを計算できます\hrule。最後に: TUG 2020 では PDF のタグ付けとアクセシビリティに重点が置かれているため、理想的には、ソリューションによって pdf アクセシビリティのテキスト読み上げユーティリティが「ドット ドット ドット ドット...」を何十億回も読み上げ始めることはありません。

コード:

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

左余白と右余白をより適切に一致させるために、適応に対して 2 つの追加の編集が行われました。

  1. ドットに対する指定されたサイドベアリングが考慮されました。

  2. 最後の右列カーニングは、\replengthリーダーの1つから(サイドベアリングのない)ドットの幅を減算するために必要でした。

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

関連情報