自定义词汇表样式:使词汇表与 \textwidth 一样宽

自定义词汇表样式:使词汇表与 \textwidth 一样宽

警告:这是显示非首字母缩略词类型条目的长格式(类似首次使用)条目

作为甲基安非他命按照另一篇文章的建议,我继续定义自己的词汇表样式(以及一些列说明符)来解决单位问题(使用字段user1)。现在我的定义如下所示(tabx3col第一个词汇表中使用的样式和tabx4col第二个词汇表中使用的样式):

\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\newglossarystyle{tabx3col}{%
 % put the glossary in a longtable environment:
 \renewenvironment{theglossary}%
  {\begin{longtable}{L{0.2\textwidth}L{0.6\textwidth}R{0.2\textwidth}}}%
  {\end{longtable}}%
 % Set the table's header:
 \renewcommand*{\glossaryheader}{}%
 % No heading between groups:
  \renewcommand*{\glsgroupheading}[1]{}%
 % Main (level 0) entries displayed in a row:
  \renewcommand*{\glossaryentryfield}[5]{%
    \glstarget{##1}{\textbf{##2}}% Name
    & ##3% Description
    & ##5% Page list
    \\% end of row
  }%
 % Sub entries treated the same as level 0 entries:
 %\renewcommand*{\glossarysubentryfield}[6]{%
  %\glossaryentryfield{##2}{##3}{##5}{##6}}%
 %% Nothing between groups:
 %\renewcommand*{\glsgroupskip}{}%
}


\newglossarystyle{tabx4col}{%
 % put the glossary in a longtable environment:
 \renewenvironment{theglossary}%
  {\begin{longtable}{L{0.1\textwidth}L{0.1\textwidth}p{0.55\textwidth}R{0.2\textwidth}}}%
  {\end{longtable}}%
 % Set the table's header:
 \renewcommand*{\glossaryheader}{}%
 % No heading between groups:
  \renewcommand*{\glsgroupheading}[1]{}%
 % Main (level 0) entries displayed in a row:
  \renewcommand*{\glossaryentryfield}[5]{%
   \glstarget{\textbf{##1}}{\textbf{##2}}% Name
   & $[$\glsentryuseri{##1}$]$% Units
   & ##3% Description
   & ##5% Page list
    \\% end of row
  }%
 % Sub entries treated the same as level 0 entries:
 %\renewcommand*{\glossarysubentryfield}[6]{%
  %\glossaryentryfield{##2}{##3}{##5}{##6}}%
 %% Nothing between groups:
 %\renewcommand*{\glsgroupskip}{}%
}

这将给出如下图所示的输出: 输出的屏幕截图

我用一些灰线编辑了屏幕截图,以便对齐文本(使用列R说明符来表示页面列表中使用的固定宽度的右对齐列)。我主要想要整个词汇表\textwidth。我认为通过使每一列都依赖于变量\textwidth并将值加到 1,我将得到一个最终与标题行一样宽的表格。我也尝试过使用 tabularx 作为表格环境,但失败了(即使使用宏命令,例如\tabularx \endtabularx )。我编译了一个 MWE(http://pastebin.com/McqsTPga,也许不再那么简单了),在这里你可以亲眼看到问题。

很抱歉这篇文章有点长,但这确实困扰着我。

答案1

“我以为通过让每一列都依赖于变量\textwidth并将值相加到 1,我最终会得到一个与标题行一样宽的表格。”这几乎是正确的,但你忘记了自动添加的列间空间。你可以@{}在列规范中隐藏它。当我用

\newglossarystyle{tabx3col}{%
 \renewenvironment{theglossary}%
  {\begin{longtable}{@{}p{0.2\textwidth}@{}p{0.6\textwidth}@{}>{\raggedleft}p{0.2\textwidth}@{}}}%
  ...

\newglossarystyle{tabx4col}{%
 \renewenvironment{theglossary}%
  {\begin{longtable}{@{}p{0.12\textwidth}@{}p{0.08\textwidth}@{}p{0.6\textwidth}@{}>{\raggedleft}p{0.2\textwidth}@{}}}%
  ...

对齐效果如预期。最好不要抑制描述前后的列间距。然后,您必须将描述列(或任何其他列)缩小 24pt。

答案2

\usepackage{calc}可以指定您的longtable对齐方式为

\begin{longtable}{
  @{} % suppress the space at the left
  L{0.1\textwidth-\tabcolsep}
  L{0.1\textwidth-2\tabcolsep}
  p{0.6\textwidth-2\tabcolsep}
  R{0.2\textwidth-\tabcolsep}
  @{} % suppress the space at the right
}

您可能希望删除最宽列中的列间距;在这种情况下

\begin{longtable}{
  @{} % suppress the space at the left
  L{0.1\textwidth}
  L{0.1\textwidth}
  p{0.6\textwidth-6\tabcolsep}
  R{0.2\textwidth}
  @{} % suppress the space at the right
}

每列前面和后面都有一个\tabcolsep宽空格;您有四列,因此,在抑制最左边和最右边的空格之后,剩下六个。

相关内容