Me gustaría tener una regla de puntos como \midrule
la del paquete booktabs.
Tomé el código de booktabs.sty, lo simplifiqué y tengo:
\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}
Y ahora estoy atrapado reemplazando la central \hrule\@height\@thisrulewidth
con algo que no forma una línea, sino puntos. He estado luchando con \leaders
, pero no lo entendí. Quizás alguien tenga una idea.
Encontré muchas preguntas similares, por supuesto. ¡Pero el truco consiste en tener un comando con parámetros del paquete booktabs!
Respuesta1
Aquí hay un comando \dotrule
que respeta la sintaxis y los parámetros de booktabs
( aboverulesep
, belowrulesep
y lightrulewidth
) pero que sólo está disponible en el entorno {NiceTabular}
de nicematrix
. La línea de puntos la dibuja Tikz (es posible cambiar las características de esa línea de puntos con las herramientas de 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}
Respuesta2
Una solución sencilla con booktabs
un entorno detabularray
paquete:
\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}