Мне бы хотелось иметь пунктирную линейку, как \midrule
из пакета booktabs.
Я взял код из booktabs.sty, упростил его и получил:
\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\makeatletter{}
\def\dotrule{\noalign{\ifnum0=`}\fi
\@aboverulesep=\aboverulesep
\global\@belowrulesep=\belowrulesep
\global\@thisruleclass=\@ne
\@BTdotted}
\def\@BTdotted{%
{\CT@arc@\hrule\@height\@thisrulewidth}%
\futurenonspacelet\@tempa\@BTendrule}
\makeatother{}
\begin{document}
Text
\begin{tabular}{lr}\toprule
Huu& Haa \\\dotrule
\end{tabular}
\end{document}
И теперь я застрял, заменяя центральное \hrule\@height\@thisrulewidth
на что-то, что делает не линию, а точки. Я боролся с \leaders
, но не получил его. Может быть, у кого-то есть идея.
Я, конечно, нашел много подобных вопросов. Но фишка в том, чтобы иметь команду с параметрами пакета booktabs!
решение1
Вот команда \dotrule
, которая учитывает синтаксис и параметры booktabs
( aboverulesep
, belowrulesep
и lightrulewidth
), но которая доступна только в среде {NiceTabular}
. nicematrix
Пунктирная линия нарисована Tikz (возможно изменить характеристики этой пунктирной линии с помощью инструментов Tikz).
\documentclass{article}
\usepackage{nicematrix}
\usepackage{booktabs}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{xcolor}
\ExplSyntaxOn
\makeatletter
\cs_set:Npn \dotrule
{
\noalign \bgroup
\peek_meaning:NTF [
{ \__dose_dotrule: }
{ \__dose_dotrule: [ \lightrulewidth ] }
}
\cs_set:Npn \__dose_dotrule: [ #1 ]
{
\skip_vertical:n { \aboverulesep + \belowrulesep + #1 }
\egroup
\tl_gput_right:Nx \g_nicematrix_code_after_tl
{ \__dose_dotrule:nn { \int_use:N \c@iRow } { #1 } }
}
\cs_new_protected:Nn \__dose_dotrule:nn
{
{
\dim_set:Nn \l_tmpa_dim { \aboverulesep + ( #2 ) / 2 }
\CT@arc@
\tikz \draw [ dotted , line~width = #2 ]
([yshift=-\l_tmpa_dim]#1-|1)
--
([yshift=-\l_tmpa_dim]#1-| \int_eval:n { \c@jCol + 1 }) ;
}
}
\makeatother
\ExplSyntaxOff
\begin{document}
\begin{NiceTabular}{cc}
\toprule
Header 1 & Header 2 \\
\dotrule
text & text \\
some text & other text \\
\bottomrule
\end{NiceTabular}
%
\hspace{2cm}
%
\begin{NiceTabular}{cc}
\toprule
Header 1 & Header 2 \\
\midrule
text & text \\
some text & other text \\
\bottomrule
\end{NiceTabular}
\vspace{1cm}
\arrayrulecolor{blue}
\begin{NiceTabular}{cc}
\toprule
Header 1 & Header 2 \\
\dotrule[3pt]% <-- mandatory
text & text \\
some text & other text \\
\bottomrule
\end{NiceTabular}
%
\hspace{2cm}
%
\begin{NiceTabular}{cc}
\toprule
Header 1 & Header 2 \\
\midrule[3pt]
text & text \\
some text & other text \\
\bottomrule
\end{NiceTabular}
\end{document}
решение2
Простое решение с booktabs
окружающей средойtabularray
упаковка:
\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\begin{document}
\begin{booktabs}{lll}
\toprule
Alpha & Beta & Gamma \\
\midrule[dashed]
Epsilon & Zeta & Eta \\
\midrule[dotted]
Iota & Kappa & Lambda \\
\bottomrule
\end{booktabs}
\end{document}