词汇表:计算自定义字段的宽度

词汇表:计算自定义字段的宽度

对于以下 MWE

% arara: lualatex: { options: [ '-synctex=1', '-shell-escape' ]}
% arara: makeglossaries
% arara: lualatex: { options: [ '-synctex=1', '-shell-escape' ]}

\documentclass{elsarticle}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{calc,siunitx,booktabs,lipsum}
\sisetup{load-configurations = abbreviations}
\usepackage[automake,stylemods,symbols,
xindy={codepage=utf8, language=greek, glsnumbers=false}
]{glossaries-extra}

\makeglossaries

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

\newglossarystyle{nameunitdesc}{%
    \setlength{\glsdescwidth}{\linewidth-\glsnamewidth-\glsunitwidth-4\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{Cp}{name={Cp},description={specific heat}, symbol={[\si{\J\per\kg\per\K}]}}

\journal{Journal name}

\begin{document}

    \begin{frontmatter}

        \title{Title}

        \begin{abstract}

            \lipsum[1]

        \end{abstract}

    \end{frontmatter}

    \gls{Cp} 

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

    \printglossary[style=nameunitdesc,title=Nomenclature]

\end{document}

在这一行中\setlength{\glsdescwidth}{\linewidth-\glsnamewidth-\glsunitwidth-2\tabcolsep},直观地讲,我需要减去2\tabcolsep以使描述字段跨越整个行宽,但是,减去4\tabcolsep会导致词汇表的右边距正确对齐:

在此处输入图片描述

减去2\tabcolsep会导致词汇表右边距溢出以下情况:

在此处输入图片描述

\tabcolsep那么,如何不经过反复试验就能准确计算出需要减去的数量呢?

答案1

这实际上与 无关glossaries,它只是tabular工作原理:

\tabcolsep是插入的边距两边表中每一列的。因此,在示例中

\begin{tabular}{ c c c }
  \hline
  a & b & c \\
  \hline
\end{tabular}

MWE 输出

表格\tabcolsep向 的左侧a和右侧延伸(您可以使用sc查看表格的宽度),而和以及之间\hline都有 的空间。2\tabcolsepabbc

在您的示例中,您使用 删除了表格边缘的分隔线@{},这样就得到了三列。这2 * 2\tabcolsep = 4\tabcolsep在它们之间形成了。

相关内容