Estou tentando criar um estilo de glossário com várias colunas (com glossaries
) que possa lidar com descrições longas, mas não estou familiarizado com como escrever um estilo de glossário e não sei exatamente como fazê-lo.
O que eu gostaria de ter é um glossário com quatro colunas; dois pares de abreviatura e descrição. Se uma descrição tiver mais de uma linha, a descrição deverá ser agrupada apenas em sua própria coluna, e a coluna de abreviação deverá pular quantas linhas for necessária para manter cada abreviação alinhada com o início de sua descrição.
Tudo o que sei fazer é formar duas colunas de total e separar manualmente a abreviatura e a descrição; por meio deste código (que tenho certeza que copiei do StackExchange há algum tempo):
\newglossarystyle{glossabbr}{%
\renewenvironment{theglossary}%
{\begin{multicols}{2}\raggedright}
{\end{multicols}}
\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{}
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glsclearpage}{}
% set how each entry should appear:
\renewcommand*{\glossentry}[2]{
\noindent\makebox[7em][l]{\glstarget{##1}{\textsc{\glossentryname{##1}}}}
\glossentrydesc{##1}\\
}
\renewcommand*{\subglossentry}[3]{%
\glossentry{##2}{##3}
}
}
O problema com esse código é que quando você tem uma descrição longa, ela simplesmente passa para a coluna de abreviações, porque o LaTeX não trata a abreviatura e a descrição como blocos separados. Você pode ver o problema aqui, destacado em vermelho:
Em última análise, tudo o que eu gostaria de fazer é pegar esses bits de descrição agrupados (os bits que não estão em versalete) e empurrá-los, confinando-os na coluna para descrições e deixando espaços em branco na coluna de abreviações onde estão agora. Como faço para que isso aconteça?
MWE com o estilo problemático de glossário:
\documentclass{article}
\usepackage[acronym,nomain]{glossaries}
\setacronymstyle{long-sc-short}
\makeglossaries
\newacronym
{inform}{inform}{informative illocutionary force}
\newacronym
{point}{point}{demonstrative illocutionary force}
\usepackage{multicol}
\newglossarystyle{glossabbr}{%
\renewenvironment{theglossary}%
{\begin{multicols}{2}\raggedright}
{\end{multicols}}
\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{}
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glsclearpage}{}
% set how each entry should appear:
\renewcommand*{\glossentry}[2]{
\noindent\makebox[7em][l]{\glstarget{##1}{\textsc{\glossentryname{##1}}}}
\glossentrydesc{##1}\\
}
\renewcommand*{\subglossentry}[3]{%
\glossentry{##2}{##3}
}
}
\begin{document}
\glsunsetall
\gls{point}
\gls{inform}
\printglossary[style=glossabbr]
\end{document}
Responder1
Este deve ser um bom começo para uma solução completa:
\documentclass{article}
\usepackage[acronym,nomain]{glossaries}
\setacronymstyle{long-sc-short}
\makeglossaries
\newacronym
{inform}{inform}{informative illocutionary force}
\newacronym
{point}{point}{demonstrative illocutionary force}
\usepackage{multicol}
\newglossarystyle{glossabbr}{%
\renewenvironment{theglossary}%
{\begin{multicols}{2}\raggedright}
{\end{multicols}}
\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{}
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glsclearpage}{}
% set how each entry should appear:
\renewcommand*{\glossentry}[2]{
\noindent\makebox[7em][l]{\glstarget{##1}%
{\begin{minipage}[t]{0.2\textwidth}
\textsc{\glossentryname{##1}}
\end{minipage}
}}
\begin{minipage}{0.2\textwidth}
\glossentrydesc{##1}
\end{minipage}\\
}
\renewcommand*{\subglossentry}[3]{%
\glossentry{##2}{##3}
}
}
\begin{document}
\glsunsetall
\gls{point}
\gls{inform}
\printglossary[style=glossabbr]
\end{document}
Observe os minipage
ambientes adicionados ao redor glossentryname
e glossentrydesc
. Esta é uma espécie de solução alternativa.
Você deve tentar ajustar o ambiente de acordo com suas necessidades - a largura pode ser aumentada (talvez, mas isso parece aceitável) e estou tendo problemas para definir o alinhamento vertical da entrada do glossário para top , não para o centro.
Deixo isso para sua pesquisa ;)