カスタム用語集スタイル: 用語集の幅を \textwidth にする

カスタム用語集スタイル: 用語集の幅を \textwidth にする

警告: これは次の質問へのフォローアップです頭字語以外のエントリの長い形式(最初に使用された形式のような)エントリを表示します。

としてマフプ他の投稿で提案されたように、私は先に進み、単位の問題 (フィールドの使用) に対処するために、独自の用語集スタイル (およびいくつかの列指定子) を定義しました。現在の定義は次のようになります (最初の用語集で使用されているスタイルと2 番目の用語集で使用されているuser1スタイル):tabx3coltabx4col

\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。すべての列を変数に依存させ、値を 1 まで追加することで、最終的にヘッダー行と同じ幅のテーブルが得られると考えました\textwidth。また、テーブル環境として 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}@{}}}%
  ...

配置は希望どおりになります。説明の前後の列間スペースを抑制しない方がよいかもしれません。その場合は、説明列 (または他の列) を 24 ポイント狭くする必要があります。

答え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広いスペースが続きます。列は 4 つあるので、左端と右端のスペースを抑制した後、6 つのスペースが残ります。

関連情報