Я хотел бы распечатать многоколоночный список номенклатуры, состоящий из нескольких групп. В данный момент, используя подход группировки, описанный вруководствои с фрагментом кода изhttp://www.latex-community.org/forum/viewtopic.php?f=51&t=7892, в принципе это работает.
Однако список проходит по всей первой колонке страницы и продолжается во второй, независимо от групп. Я бы предпочел, чтобы каждая группа находилась в своей собственной multicols
среде:
Что у меня есть:
Что бы я хотел:
Есть ли способ добиться этого с помощью nomencl
пакета?
\documentclass{article}
\usepackage{nomencl}
\usepackage{ifthen}
\usepackage{multicol}
\makenomenclature
\renewcommand{\nomgroup}[1]{%
\ifthenelse{\equal{#1}{A}}{%
\medskip\item[\large\textbf{\textsf{Latin}}]\medskip%
}{%
\ifthenelse{\equal{#1}{B}}{%
\medskip\item[\large\textbf{\textsf{Greek}}]\medskip}{%
\medskip}
}
}
\renewcommand*\nompreamble{\begin{multicols}{2}}
\renewcommand*\nompostamble{\end{multicols}}
\begin{document}
\nomenclature[A]{a}{1}%
\nomenclature[A]{b}{2}%
\nomenclature[A]{c}{3}%
\nomenclature[A]{d}{4}%
\nomenclature[A]{e}{5}%
\nomenclature[A]{f}{6}%
\nomenclature[A]{g}{7}%
\nomenclature[A]{h}{8}%
\nomenclature[A]{i}{9}%
\nomenclature[A]{j}{10}%
\nomenclature[A]{k}{11}%
\nomenclature[A]{l}{12}%
\nomenclature[B]{$\alpha$}{1}%
\nomenclature[B]{$\beta$}{2}%
\nomenclature[B]{$\gamma$}{3}%
\printnomenclature
\end{document}
решение1
Не уверен, что это лучшее решение, но все же...
% arara: pdflatex
% arara: nomencl
% arara: pdflatex
\documentclass{article}
\usepackage{nomencl}
\usepackage{multicol}
\makenomenclature
\makeatletter
\newif\if@nomlist
\newcommand*\nomlist{%
\@nomlisttrue
\list{}{%
\labelwidth\nom@tempdim
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\itemsep\nomitemsep
\let\makelabel\nomlabel}}
\renewcommand*\thenomenclature{%
\@ifundefined{chapter}%
{\section*{\nomname}\if@intoc\addcontentsline{toc}{section}{\nomname}\fi}%
{\chapter*{\nomname}\if@intoc\addcontentsline{toc}{chapter}{\nomname}\fi}%
\nompreamble
\@nomlistfalse
}
\renewcommand\nomgroup[1]{%
\if@nomlist\endlist\end{multicols}\fi
\ifx#1A\relax
\def\nomgroupname{Latin}%
\else
\ifx#1B\relax
\def\nomgroupname{Greek}%
\else
\def\nomgroupname{Other}%
\fi
\fi
\begin{multicols}{2}[\noindent\large\textbf{\textsf{\nomgroupname}}]
\nomlist
}
\renewcommand*\nompreamble{}
\renewcommand*\nompostamble{\end{multicols}}
\makeatother
\usepackage{lipsum}
\begin{document}
\lipsum[1-2]
\nomenclature[A]{a}{1}%
\nomenclature[A]{b}{2}%
\nomenclature[A]{c}{3}%
\nomenclature[A]{d}{4}%
\nomenclature[A]{e}{5}%
\nomenclature[A]{f}{6}%
\nomenclature[A]{g}{7}%
\nomenclature[A]{h}{8}%
\nomenclature[A]{i}{9}%
\nomenclature[A]{j}{10}%
\nomenclature[A]{k}{11}%
\nomenclature[A]{l}{12}%
\nomenclature[B]{$\alpha$}{1}%
\nomenclature[B]{$\beta$}{2}%
\nomenclature[B]{$\gamma$}{3}%
\printnomenclature
\end{document}
решение2
Решение cgnieder почти идеально, поскольку оно иногда ломается из-за длинных записей, охватывающих 2 или более строк.
Добавление \begin{minipage}[t]{\linewidth}Your nomenclature entry\end{minipage}
предотвратит его поломку.
Интервалы между записями в новой версии довольно большие, поэтому вам следует добавить эту \raggedcolumns
опцию. Если вы не хотите вручную добавлять, minipage
используйте следующий код, но это переименование сделает группу обязательной, и записи нужно будет изменить с \nomenclature[B]{$\alpha$}{1}
на \nomenclature{B}{$\alpha$}{1}
(обратите внимание, что квадратные скобки теперь фигурные). Вероятно, есть лучший способ сделать это, но мои знания пользовательского кода latex не самые лучшие.
\usepackage{letltxmacro}
\LetLtxMacro\oldnomenclature\nomenclature
\renewcommand{\nomenclature}[3]{\oldnomenclature[{#1}]{#2}{\begin{minipage}[t]{\linewidth}#3\end{minipage}}}
\documentclass{article}
\usepackage{nomencl}
\usepackage{multicol}
\makenomenclature
\makeatletter
\newif\if@nomlist
\newcommand*\nomlist{%
\@nomlisttrue
\list{}{%
\labelwidth\nom@tempdim
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\itemsep\nomitemsep
\let\makelabel\nomlabel}}
\renewcommand*\thenomenclature{%
\@ifundefined{chapter}%
{\section*{\nomname}\if@intoc\addcontentsline{toc}{section}{\nomname}\fi}%
{\chapter*{\nomname}\if@intoc\addcontentsline{toc}{chapter}{\nomname}\fi}%
\nompreamble
\@nomlistfalse
}
\renewcommand\nomgroup[1]{%
\if@nomlist\endlist\end{multicols}\fi
\ifx#1A\relax
\def\nomgroupname{Latin}%
\else
\ifx#1B\relax
\def\nomgroupname{Greek}%
\else
\def\nomgroupname{Other}%
\fi
\fi
\begin{multicols}{2}[\raggedcolumns\noindent\large\textbf{\textsf{\nomgroupname}}]
\nomlist
}
\renewcommand*\nompreamble{}
\renewcommand*\nompostamble{\end{multicols}}
\makeatother
\usepackage{lipsum}
\begin{document}
\nomenclature[A]{a}{1}%
\nomenclature[A]{b}{2}%
\nomenclature[A]{c}{3}%
\nomenclature[A]{d}{4}%
\nomenclature[A]{e}{5}%
% \nomenclature[A]{f}{This is a very long description that won't fit so it gets split on to multiple columns}%
\nomenclature[A]{f}{\begin{minipage}[t]{\linewidth}This is a very long description that won't fit so it gets split on to multiple columns\end{minipage}}%
\nomenclature[A]{g}{7}%
\nomenclature[A]{h}{8}%
\nomenclature[A]{i}{9}%
\nomenclature[A]{j}{10}%
\nomenclature[A]{k}{11}%
\nomenclature[B]{$\alpha$}{1}%
\nomenclature[B]{$\beta$}{2}%
\nomenclature[B]{$\gamma$}{3}%
\printnomenclature
\end{document}