![\BeforeBeginEnvironment 没有做任何事情?](https://linux22.com/image/289526/%5CBeforeBeginEnvironment%20%E6%B2%A1%E6%9C%89%E5%81%9A%E4%BB%BB%E4%BD%95%E4%BA%8B%E6%83%85%EF%BC%9F.png)
我正在尝试做类似的事情两栏词汇表,将现有的词汇表样式换行成多列。我按照第一个答案评论中的建议操作,即使用将etoolbox
环境放在theglossary
里面\multicols
。问题是,只有\AfterEndEnvironment
似乎在做任何事情。此代码:
\documentclass{article}
\usepackage{glossaries}
\setacronymstyle{long-sc-short}
\newacronym{acr}{acr}{Acronym}
\makeglossaries
\newglossarystyle{twocollong}{
\glossarystyle{long}
\BeforeBeginEnvironment{theglossary}{\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}
结果: