Estilo de glosario personalizado: hacer que el glosario tenga un ancho de \textwidth

Estilo de glosario personalizado: hacer que el glosario tenga un ancho de \textwidth

ADVERTENCIA: Esta es una pregunta de seguimiento paraMostrar entradas de formato largo (como las de primer uso) de entradas que no son de tipo acrónimo.

ComomafpSugerí en la otra publicación que seguí adelante y definí mis propios estilos de glosario (junto con algunos especificadores de columnas) para abordar el problema de la unidad (usando el user1campo). Ahora mi definición se ve así (estilo tabx3colusado en el primer glosario y tabx4colusado en el 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}{}%
}

Esto me da un resultado como se muestra en la imagen a continuación: captura de pantalla de la salida

Edito la captura de pantalla con algunas líneas grises para el texto que me gustaría alinear (usando el Respecificador de columna para columnas irregulares de ancho fijo utilizadas en la lista de páginas). Principalmente me gustaría tener el glosario completo \textwidth. Pensé que al hacer que cada columna dependiera de la \textwidthvariable y sumar los valores hasta 1 obtendría una tabla que, en última instancia, sería tan ancha como el encabezado. También intenté usar tabularx como entorno de tabla, lo cual falló (aunque usé los comandos de macro, por ejemplo, \tabularx \endtabularx ). He compilado un MWE (http://pastebin.com/McqsTPga, tal vez ya no sea tan mínimo) donde puedas ver el problema por ti mismo.

Perdón por el post algo extenso, pero esto realmente me está molestando.

Respuesta1

"Pensé que al hacer que cada columna dependiera de la \textwidthvariable y sumar los valores hasta 1 obtendría una tabla que, en última instancia, sería tan ancha como el encabezado". Esto es casi cierto, pero olvidó el espacio entre columnas que se agrega automáticamente. Puede suprimir eso @{}en la especificación de la columna. Cuando especifico tus tablas con

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

y

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

la alineación sale como se desea. Puede ser una mejor idea no suprimir el espacio entre columnas antes y después de la descripción. Luego tienes que hacer que la columna de descripción (o cualquier otra columna) sea más estrecha en 24 puntos.

Respuesta2

Con \usepackage{calc}puede especificar su longtablealineación 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
}

Es posible que desee eliminar los espacios entre columnas en la columna más ancha; en este 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 columna está precedida y seguida por un \tabcolsepamplio espacio; tiene cuatro columnas, por lo que, después de suprimir los espacios de la izquierda y la derecha, quedan seis.

información relacionada