我想列印一個由多個組組成的多列命名清單。目前,使用中描述的分組方法手動的以及來自的程式碼片段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}