그룹화된 다중 열 명명법

그룹화된 다중 열 명명법

여러 그룹으로 구성된 여러 열 명명법 목록을 인쇄하고 싶습니다. 현재는 다음에 설명된 그룹화 접근 방식을 사용합니다.수동그리고 다음의 코드 조각을 사용하여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}

\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}

관련 정보