将 toprule 和 bottomrule 添加到词汇表中

将 toprule 和 bottomrule 添加到词汇表中

我知道如何将 toprule 添加到此词汇表中,但无法对 bottomrule 执行相同的操作。因此,对于此 MWE,我有两个问题:

  1. 如何在词汇表末尾添加底部规则?
  2. 如何分别控制顶部规则和底部规则以及第一个和最后一个条目之间的垂直跳跃?

发现根本\toprule\\[-\baselineskip]没有任何效果,就好像它被写了一样\toprule\\[0em],需要一些解释为什么\\[-\baselineskip]没有按预期获取。

\documentclass{article}
\usepackage{booktabs}
\usepackage{calc,siunitx}
\sisetup{load-configurations = abbreviations}
\usepackage[stylemods]{glossaries-extra}

\makenoidxglossaries

\newlength\glsnamewidth
\newlength\glsunitwidth
\settowidth{\glsnamewidth}{\textbf{sign}}
\settowidth{\glsunitwidth}{\textbf{unit}}

\newglossarystyle{nameunitdesc}{%
  \setlength{\glsdescwidth}{\linewidth-\glsnamewidth-\glsunitwidth-6\tabcolsep}%
  \renewenvironment{theglossary}%
    {\begin{supertabular}{@{}p{\glsnamewidth}p{\glsunitwidth}p{\glsdescwidth}@{}}}%
    {\end{supertabular}}%
 \renewcommand*{\glossaryheader}{%
    \toprule\\[-\baselineskip]% it strangely has the same effect of \\[0em]
 }%
  \renewcommand*{\glsgroupheading}[1]{}%
  \renewcommand{\glossentry}[2]{%
    \raggedright\glstarget{##1}{\glossentryname{##1}} & 
    \centering\glossentrysymbol{##1} &
    \glossentrydesc{##1}\tabularnewline
  }%
  \renewcommand{\subglossentry}[3]{\glossentry{##2}{##3}}%
  \renewcommand*{\glsgroupskip}{}%
}

\glsnoexpandfields

\newglossaryentry{L}{name={L},description={some text},symbol={---}}
\newglossaryentry{P}{name={Cp},description={specific heat}, symbol={[\si{\J\per\kg\per\K}]}}

\begin{document}

\gls{L}, \gls{P}.

\glsFindWidestUsedAnyNameSymbol{\glsunitwidth}
\settowidth{\dimen0}{\glsgetwidestname}
\ifdim\dimen0>\glsnamewidth
    \glsnamewidth=\dimen0
\fi

\printnoidxglossary[style=nameunitdesc,sort=use]

\end{document}

答案1

您可以在定义里面设置行{theglossary}

  \renewenvironment{theglossary}%
    {\begin{supertabular} {@{}p{\glsnamewidth}p{\glsunitwidth}p{\glsdescwidth}@{}}\toprule}%
    {\bottomrule\end{supertabular}}%

您将\\[-\baselineskip]体验到正常的 LaTeX 表格行为:这里实际上忽略了负参数,因为可选参数将实现为具有负深度的线,但在包装盒期间,TeX 将水平盒的深度设置为至少零。您可以通过使用命令控制间距来避免此问题,booktabs\addlinespace不必插入一行并使用返回-\baselineskip。在示例中,我使用它在顶线下方添加 5pt 的垂直空间:

\documentclass{article}
\usepackage{booktabs}
\usepackage{calc,siunitx}
\sisetup{load-configurations = abbreviations}
\usepackage[stylemods]{glossaries-extra}

\makenoidxglossaries

\newlength\glsnamewidth
\newlength\glsunitwidth
\settowidth{\glsnamewidth}{\textbf{sign}}
\settowidth{\glsunitwidth}{\textbf{unit}}

\newglossarystyle{nameunitdesc}{%
  \setlength{\glsdescwidth}{\linewidth-\glsnamewidth-\glsunitwidth-6\tabcolsep}%
  \renewenvironment{theglossary}%
    {\begin{supertabular}{@{}p{\glsnamewidth}p{\glsunitwidth}p{\glsdescwidth}@{}}\toprule\addlinespace[5pt]}%
    {\bottomrule\end{supertabular}}%
  \renewcommand*{\glossaryheader}{}%
  \renewcommand*{\glsgroupheading}[1]{}%
  \renewcommand{\glossentry}[2]{%
    \raggedright\glstarget{##1}{\glossentryname{##1}} & 
    \centering\glossentrysymbol{##1} &
    \glossentrydesc{##1}\tabularnewline
  }%
  \renewcommand{\subglossentry}[3]{\glossentry{##2}{##3}}%
  \renewcommand*{\glsgroupskip}{}%
}

\glsnoexpandfields

\newglossaryentry{L}{name={L},description={some text},symbol={---}}
\newglossaryentry{P}{name={Cp},description={specific heat}, symbol={[\si{\J\per\kg\per\K}]}}

\begin{document}

\gls{L}, \gls{P}.

\glsFindWidestUsedAnyNameSymbol{\glsunitwidth}
\settowidth{\dimen0}{\glsgetwidestname}
\ifdim\dimen0>\glsnamewidth
    \glsnamewidth=\dimen0
\fi

\printnoidxglossary[style=nameunitdesc,sort=use]

\end{document}

在此处输入图片描述

相关内容