Сгруппированная многоколоночная номенклатура

Сгруппированная многоколоночная номенклатура

Я хотел бы распечатать многоколоночный список номенклатуры, состоящий из нескольких групп. В данный момент, используя подход группировки, описанный вруководствои с фрагментом кода из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}

Связанный контент