booktabs: \dotrule als \midrule

booktabs: \dotrule als \midrule

Ich hätte gerne eine gepunktete Linie wie \midruleaus dem Booktabs-Paket.

Ich habe Code aus booktabs.sty genommen, ihn vereinfacht und habe:

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

Und jetzt stecke ich fest und muss die Mitte \hrule\@height\@thisrulewidthdurch etwas ersetzen, das keine Linie, sondern Punkte bildet. Ich habe mich damit abgemüht \leaders, aber es nicht hinbekommen. Vielleicht hat jemand eine Idee.

Ich habe natürlich viele ähnliche Fragen gefunden. Aber der Trick besteht darin, einen Befehl mit Parametern des Booktabs-Pakets zu haben!

Antwort1

Hier ist ein Befehl \dotrule, der die Syntax und die Parameter von booktabs( aboverulesep, belowrulesepund ) beachtet, aber nur in der Umgebung von lightrulewidthverfügbar ist . Die gepunktete Linie wird von Tikz gezeichnet (es ist möglich, die Eigenschaften dieser gepunkteten Linie mit den Tools von Tikz zu ändern).{NiceTabular}nicematrix

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

Ausgabe des obigen Codes

Antwort2

Eine einfache Lösung mit booktabsUmgebung vontabularrayPaket:

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

Bildbeschreibung hier eingeben

verwandte Informationen