Пользовательский стиль глоссария: сделать глоссарий шириной \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спецификатор столбцов для столбцов фиксированной ширины raggedright, используемых в списке страниц). В основном я хотел бы иметь весь глоссарий \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широкий пробел; у вас четыре столбца, поэтому после удаления левого и правого пробелов их остается шесть.

Связанный контент