我正在尝试制作一个glossaries
可以处理长描述的多列词汇表样式(带有),但我不太熟悉如何编写词汇表样式,也不知道如何实现它。
我想要一个有四列的词汇表;两对缩写和描述。如果描述超过一行,描述应该只在其自己的列中换行,缩写列应该跳过任意多行,以使每个缩写与其描述的开头对齐。
我所知道的做法是制作两个总列并手动分离缩写和描述;通过此代码(我很确定这是我前段时间从 StackExchange 复制粘贴过来的):
\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}
}
}
此代码的问题在于,当您有较长的描述时,它会直接换行到缩写列中,因为 LaTeX 不会将缩写和描述视为单独的块。您可以在此处看到问题,以红色突出显示:
最终,我想要做的就是把那些包装好的描述位(不是小写字母的位)推过来,将它们限制在描述列中,并在缩写列中留下空格,保留它们现在的位置。我该如何做到这一点?
具有有问题的词汇表样式的 MWE:
\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}
答案1
对于完整的解决方案来说,这应该是一个好的开始:
\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}
请注意在和minipage
周围添加的环境。这是一种原始的解决方法。glossentryname
glossentrydesc
您应该尝试根据您的需要调整环境 - 宽度可以增加(也许,但这看起来可以接受)并且我在将词汇表条目的垂直对齐方式设置为顶部而不是居中时遇到了麻烦。
我把这个留给你的研究;)