行の後に表の左端から右端まで点線を追加しようとしています。最善の試み (コードとスクリーンショットは下記) には 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 つの追加の編集が行われました。
ドットに対する指定されたサイドベアリングが考慮されました。
最後の右列カーニングは、
\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}