\BeforeBeginEnvironment 没有做任何事情?

\BeforeBeginEnvironment 没有做任何事情?

我正在尝试做类似的事情两栏词汇表,将现有的词汇表样式换行成多列。我按照第一个答案评论中的建议操作,即使用将etoolbox环境放在theglossary里面\multicols。问题是,只有\AfterEndEnvironment似乎在做任何事情。此代码:

\documentclass{article}
\usepackage{glossaries}
    \setacronymstyle{long-sc-short}
\newacronym{acr}{acr}{Acronym}
\makeglossaries
\newglossarystyle{twocollong}{
    \glossarystyle{long}
    \BeforeBeginEnvironment{thegl‌​ossary}{\begin{multicols}{2}}
    \AfterEndEnvironment{theglossary}{\end{multicols}}
    }
\begin{document}
Text text 
\acrshort{acr} 
text text

\printglossary[style=twocollong]

\end{document}

给出错误“\begin{document}以 结尾\end{multicols}”。仅注释掉该\AfterEndEnvironment行(并保留\BeforeBeginEnvironment)即可得到一个工作文档 - 没有关于\begin{multicols}以 结尾的错误\end{document}。似乎\BeforeBeginEnvironment根本没有插入任何内容。

我在这里做错了什么?

答案1

以下定义了一种新的词汇表样式,mcoltree可产生类似表格的外观:

\documentclass{article}

\usepackage{glossaries}
\usepackage{glossary-mcols}

\makeglossaries

\newlength\acrwidth

\appto\newacronymhook{%
  \settowidth{\acrwidth}{\textsc{\the\glsshorttok}}%
  \addtolength{\acrwidth}{1em}%
  \ifdim\acrwidth>\glstreeindent
    \setlength{\glstreeindent}{\acrwidth}%
  \fi
}

\setacronymstyle{long-sc-short}

\newacronym{acr}{acr}{Acronym}
\newacronym{acr2}{acr2}{Acronym2}
\newacronym{acr3}{acr3}{Acronym3}
\newacronym{acr4}{acr4}{Acronym4}
\newacronym{acr5}{acr5}{Acronym5}
\newacronym{acr6}{acr6}{Acronym6}
\newacronym{acr7}{acr7}{Acronym7}
\newacronym{acr8}{acr8}{Acronym8}
\newacronym{acr9}{acr9}{Acronym9}
\newacronym{acr10}{acr10}{Acronym10}

\newglossarystyle{mystyle}{%
  \setglossarystyle{mcoltree}%
  \renewcommand{\glossentry}[2]{%
    \hangindent\glstreeindent\relax
    \parindent0pt\relax
    \makebox[\glstreeindent][l]{%
       \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}}}%
    \glossentrydesc{##1}\glspostdescription\space##2\par
  }%
}

\begin{document}

Text text 
text text
\glsaddall

\printglossary[style=mystyle]

\end{document}

结果:

生成的词汇表的图像

相关内容