Estilo de glossário personalizado: torne o glossário tão largo quanto \textwidth

Estilo de glossário personalizado: torne o glossário tão largo quanto \textwidth

AVISO: Esta é uma pergunta de acompanhamento paraExibir entradas em formato longo (semelhante ao primeiro uso) de entradas sem acrônimos.

Comomapasugerido em outro post, fui em frente e defini meus próprios estilos de glossário (junto com alguns especificadores de coluna) para resolver o problema da unidade (usando o user1campo). Agora minha definição fica assim (estilo tabx3colusado no primeiro glossário e tabx4colusado no segundo):

\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}{}%
}

Isso me dá uma saída conforme mostrado na imagem abaixo: captura de tela da saída

Eu edito a captura de tela com algumas linhas cinzas para o texto que gostaria de alinhar (usando o Respecificador de coluna para colunas irregulares de largura fixa usadas na lista de páginas). Principalmente eu gostaria de ter o glossário completo \textwidth. Pensei que, ao tornar cada coluna dependente da \textwidthvariável e adicionar os valores até 1, obteria uma tabela que, em última análise, seria tão larga quanto a linha do cabeçalho. Também tentei usar tabularx como ambiente de tabela, que falhou (mesmo usando comandos de macro, por exemplo, \tabularx \endtabularx ). Eu compilei um MWE (http://pastebin.com/McqsTPga, talvez não seja mais tão mínimo), onde você pode ver o problema por si mesmo.

Sinto muito pela postagem um tanto longa, mas isso está realmente me incomodando.

Responder1

"Pensei que, ao tornar cada coluna dependente da \textwidthvariável e adicionar os valores até 1, obteria uma tabela que seria tão larga quanto a linha do cabeçalho." Isso é quase verdade, mas você esqueceu o espaço entre colunas que é adicionado automaticamente. Você pode suprimir isso @{}na especificação da coluna. Quando eu especifico suas tabelas com

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

e

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

o alinhamento sai conforme desejado. Pode ser uma ideia melhor não suprimir o espaço entre colunas antes e depois da descrição. Então você deve estreitar a coluna de descrição (ou qualquer outra coluna) em 24 pontos.

Responder2

Com \usepackage{calc}você pode especificar seu longtablealinhamento como

\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
}

Você pode querer remover os espaços entre colunas na coluna mais larga; nesse caso

\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
}

Cada coluna é precedida e seguida por um \tabcolsepamplo espaço; você tem quatro colunas, então, depois de suprimir os espaços mais à esquerda e à direita, seis delas permanecem.

informação relacionada