警告:这是显示非首字母缩略词类型条目的长格式(类似首次使用)条目。
作为甲基安非他命按照另一篇文章的建议,我继续定义自己的词汇表样式(以及一些列说明符)来解决单位问题(使用字段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
宽空格;您有四列,因此,在抑制最左边和最右边的空格之后,剩下六个。