pestañas de libros: \dotrule como \midrule

pestañas de libros: \dotrule como \midrule

Me gustaría tener una regla de puntos como \midrulela 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\@thisrulewidthcon 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 \dotruleque respeta la sintaxis y los parámetros de booktabs( aboverulesep, belowrulesepy 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}

Salida del código anterior

Respuesta2

Una solución sencilla con booktabsun entorno detabularraypaquete:

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

ingrese la descripción de la imagen aquí

información relacionada