
Estoy intentando automatizar las tablas de descripción de ecuaciones con la ayuda del glossaries
paquete. ya encontréestepregunta, pero por un lado no funcionó para mí y por el otro parece bastante complicado (en comparación con mi código actual).
Esto es lo que tengo hasta ahora:
\documentclass[parskip=half]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[nomain, symbols]{glossaries}
\usepackage{blindtext}
\usepackage{etoolbox}
\usepackage{multicol}
% \usepackage{showframe}
\newglossaryentry{alpha}{name={Alpha}, symbol={\ensuremath{\alpha}}, description={first symbol}}
\newglossaryentry{beta}{name={Beta}, symbol={\ensuremath{\beta}}, description={second symbol}}
\newglossaryentry{gamma}{name={Gamma}, symbol={\ensuremath{\gamma}}, description={third symbol}}
\makeglossaries
\newcommand{\addVarDesc}[1]{
\renewcommand*\do[1]{\glsadd{##1}\makebox[0.5cm][r]{\glssymbol{##1}} ${}={}$ \glsname{##1}\\}
\noindent with:\quad%
\begin{minipage}[t]{.9\linewidth}
\begin{multicols}{2}
\docsvlist{#1}
\end{multicols}
\end{minipage}\par\medskip
}
\newcommand{\addVarDescTab}[1]{
\renewcommand*\do[1]{\glsadd{##1}\glssymbol{##1} & \glsname{##1}\\}
\noindent with:\quad%
\begin{tabular}[t]{l@{${}={}$}l}
\docsvlist{#1}
\end{tabular}\par\medskip
}
\begin{document}
\printglossaries
\section{With multicols}
\blindtext[1]
\begin{equation}
\alpha = \beta + \gamma
\end{equation}
\addVarDesc{alpha, beta, gamma}
\blindtext[2]
\section{With tabular}
\blindtext[1]
\begin{equation}
\alpha = \beta + \gamma
\end{equation}
\addVarDescTab{alpha, beta, gamma}
\blindtext[2]
\end{document}
Con esos resultados:
Como puede ver, la variante multicol está completamente fuera de lugar. Además, es más difícil alinear las entradas por igual. Pero con esta versión, me gusta la flexibilidad en el número de columnas.
Mientras que la versión tabular me parece más limpia en la alineación de los elementos. Sin embargo, desperdicio más espacio horizontalmente.
¿Tienes alguna idea de cómo mejorar la apariencia? Una cosa que tenía en mente sería dividir las mesas en dos mesas una al lado de la otra. Pero no sé cómo implementar esto con el \docsvlist
comando.
¡Cualquier idea es muy apreciada!
Respuesta1
Mantendría la descripción dentro de la pantalla para evitar un espacio excesivo entre la ecuación y la descripción.
Además, leemos de izquierda a derecha (en inglés). Sería posible obtener
alpha gamma
beta
pero no estoy dispuesto a hacerlo.
Lo soluciono con expl3
que tiene muchas funciones que vienen muy bien. Primero, almaceno la lista en una secuencia que se puede mapear junto con el índice de elementos, para poder decidir si emitir \\
(al final de una fila) o &
al agregar elementos a una variable que almacena el cuerpo para la siguiente tabular
.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[nomain, symbols]{glossaries}
\usepackage{xparse}
\usepackage{lipsum}
\newglossaryentry{alpha}{
name={Alpha},
symbol={\ensuremath{\alpha}},
description={first symbol}
}
\newglossaryentry{beta}{
name={Beta},
symbol={\ensuremath{\beta}},
description={second symbol}
}
\newglossaryentry{gamma}{
name={Gamma},
symbol={\ensuremath{\gamma}},
description={third symbol}
}
\makeglossaries
\ExplSyntaxOn
\NewDocumentCommand{\addVarDesc}{O{2}m}
{% #1 = number of columns (default 2), #2 = list of keys
\wulle_vardesc:nn { #1 } { #2 }
}
\seq_new:N \l__wulle_vardesc_vars_seq
\tl_new:N \l__wulle_vardesc_body_tl
\cs_new_protected:Nn \wulle_vardesc:nn
{
\\\notag
\begin{minipage}{\displaywidth}
\seq_set_from_clist:Nn \l__wulle_vardesc_vars_seq { #2 }
\tl_clear:N \l__wulle_vardesc_body_tl
\seq_indexed_map_inline:Nn \l__wulle_vardesc_vars_seq
{
\tl_put_right:Nn \l__wulle_vardesc_body_tl
{
\glsadd{##2}\makebox[0.5cm][r]{\glssymbol{##2}} ${}={}$ \glsname{##2}
}
\int_compare:nTF { \int_mod:nn { ##1 } { #1 } = 0 }
{
\tl_put_right:Nn \l__wulle_vardesc_body_tl { \\ }
}
{
\tl_put_right:Nn \l__wulle_vardesc_body_tl { & }
}
}
with:~\begin{tabular}[t]{@{}*{#1}{l}@{}} \l__wulle_vardesc_body_tl \end{tabular}
\end{minipage}
}
\ExplSyntaxOff
\begin{document}
\printglossaries
\lipsum[1][1-3]
\begin{gather}
\alpha = \beta + \gamma
\addVarDesc{alpha, beta, gamma}
\end{gather}
\lipsum[2][1-3]
\begin{gather}
\alpha = \beta + \gamma
\addVarDesc[3]{alpha, beta, gamma}
\end{gather}
\lipsum[3][1-3]
\begin{gather}
\alpha = \beta + \gamma
\addVarDesc[1]{alpha, beta, gamma}
\end{gather}
\lipsum[4][1-3]
\end{document}