북탭: \dotrule을 \midrule로

북탭: \dotrule을 \midrule로

\midrulebooktabs 패키지 와 같은 점선 규칙을 갖고 싶습니다 .

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의 구문과 매개변수를 존중 하지만 의 환경에서만 사용할 수 있는 명령입니다 . 점선은 Tikz에 의해 그려집니다(Tikz 도구를 사용하여 점선의 특성을 변경할 수 있습니다).booktabsaboverulesepbelowruleseplightrulewidth{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}

위 코드의 출력

답변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}

여기에 이미지 설명을 입력하세요

관련 정보