我希望能够定义术语/关键词并给出可能跨越多个段落的定义。给出以下形式的定义:
\begin{definition}[Blue]
Blue is one of ...
\end{definition}
\begin{definition}[Argument]
An argument is ...
\end{definition}
我希望能够用命令(例如\usedef{blue}
)引用定义,并且我想创建两个单独的列表,均按字典顺序排列,其中一个是普通的词汇表索引(仅关键字和引用的页面),另一个是术语和定义的概述。
这个glossaries
包在这方面做了一些事情,但是它不支持我的最后一个要求。另外,我不知道它如何处理多段定义。有一个可选参数叫做description
though。
什么是实现我的目标的一个良好起点,或者也许有一个软件包已经提供了此功能?
它看起来有点像这样。(省略了前文中的引用)请不要介意字体。
答案1
结合etoc
和glossaries
在我最初的回答(见下文)中,我为定义定义了一个自定义环境,并用它etoc
来为它们创建定义表(ToD)。但是,由于任务基本上是拥有的功能glossaries
加上 ToD,因此更好的想法是使用glossaries
其所有方便的功能并etoc
另外使用 ToD。最简单的方法是\listofdefinitions
从我的原始答案中复制并定义一个自定义词汇表样式,该样式克隆预定义样式之一并添加的内容行etoc
。这样,条目 a 使用 ' 可能性进行排序glossaries
,即通过makeindex
或通过xindy
。可以通过所有命令链接到条目glossaries
,例如标准\gls{<label>}
。
代码如下:
\documentclass{article}
\usepackage{parskip}
\usepackage[colorlinks]{hyperref}
\usepackage{etoc}
\usepackage[nopostdot,numberedsection]{glossaries}
\makeglossaries
\newglossarystyle{mylist}{%
\glossarystyle{list}% base this style on the list style
\renewcommand\glossaryentryfield[5]{%
% #1: label
% #2: name
% #3: description
% #4: symbol
% #5: page number(s)
\etoctoccontentsline{definition}{\protect\numberline{##2}}%
\item[\glsentryitem{##1}\glstarget{##1}{##2}] ##3\glspostdescription\space##5
}%
}
% this will display all definitions but nothing else as a toc:
\newcommand\listofdefinitions{%
\setcounter{tocdepth}{1}%
\etocsetlevel{definition}{1}% 'definition' entries will be included
\etocsetlevel{section}{2}% % sections are hidden
\etocsettocstyle{\section{Foo}}{}%
\etocsetstyle{definition}
{}{}
{\noindent\etocnumber\strut\leaders\etoctoclineleaders\hfill\etocpage\par}
{\pagebreak[2]\vskip\baselineskip}%
\tableofcontents
}
% use standard toc and hide definition entries
\etocsetlevel{definition}{6}
% dummy text:
\usepackage{lipsum}
% define entries:
\newglossaryentry{foo}{
name = Foo ,
description = \lipsum*[1]
}
\newglossaryentry{bar}{
name = Foo Bar ,
description = \lipsum*[1-2]
}
\newglossaryentry{blue}{
name = Blue ,
description = \lipsum*[1]
}
\newglossaryentry{argument}{
name = Argument ,
description = \lipsum*[1]
}
\begin{document}
\tableofcontents
\section{Foo Bar}
\subsection{Foo}
\lipsum[1]
\subsection{Bar}
\lipsum[2-4]
\gls{blue} and \gls{foo} and \gls{bar} and \gls{argument}
\appendix
\listofdefinitions
\renewcommand\glossaryname{Own name}
\glossarystyle{mylist}
\printglossaries
\end{document}
原始答案
这张照片让我想起jfbu 对 »自动在表格上对练习进行编号« 的回答我认为这似乎是一个类似的任务。下面是我第一次使用的结果etoc
...
我定义了一个简单的definition
环境:
\newcounter{definition}
\newenvironment{definition}[1]
{%
\refstepcounter{definition}%
\etoctoccontentsline{definition}{\protect\numberline{#1}}%
\par\noindent\textbf{#1}\quad
}
{\par\bigskip}
\listofdefinitions
以及输出»definitions toc«的命令:
\newcommand\listofdefinitions{%
\setcounter{tocdepth}{1}%
\etocsetlevel{definition}{1}% 'definition' entries will be included
\etocsetlevel{section}{2}% % sections are hidden
\etocsettocstyle{\section{Foo}}{}%
\etocsetstyle{definition}
{}{}
{\noindent\etocnumber\strut\leaders\etoctoclineleaders\hfill\etocpage\par}
{\pagebreak[2]\vskip\baselineskip}%
\tableofcontents
}
为了证明正常目录不受此影响(至少在\etocsetlevel{definition}{6}
之前调用时不受此影响),我\tableofcontents
在下面的文档中添加了一个虚拟部分。
产生上面显示的输出的完整代码的有趣部分是:
\appendix
\listofdefinitions
\section{Bar}
\begin{definition}{Blue}
\lipsum[2]
\end{definition}
\begin{definition}{Argument}
\lipsum[2-3]
\end{definition}
完整代码如下:
\documentclass{article}
\usepackage{parskip}
\usepackage[colorlinks]{hyperref}
\usepackage{etoc}
% a simple `definition' environment:
\newcounter{definition}
\newenvironment{definition}[1]
{%
\refstepcounter{definition}%
\etoctoccontentsline{definition}{\protect\numberline{#1}}%
\par\noindent\textbf{#1}\quad
}
{\par\bigskip}
% this will display all definitions but nothing else as a toc:
\newcommand\listofdefinitions{%
\setcounter{tocdepth}{1}%
\etocsetlevel{definition}{1}% 'definition' entries will be included
\etocsetlevel{section}{2}% % sections are hidden
\etocsettocstyle{\section{Foo}}{}%
\etocsetstyle{definition}
{}{}
{\noindent\etocnumber\strut\leaders\etoctoclineleaders\hfill\etocpage\par}
{\pagebreak[2]\vskip\baselineskip}%
\tableofcontents
}
% use standard toc and hide definition entries
\etocsetlevel{definition}{6}
% dummy text:
\usepackage{lipsum}
\begin{document}
\tableofcontents
\section{Foo Bar}
\subsection{Foo}
\lipsum[1]
\subsection{Bar}
\lipsum[2-4]
\appendix
\listofdefinitions
\section{Bar}
\begin{definition}{Blue}
\lipsum[2]
\end{definition}
\begin{definition}{Argument}
\lipsum[2-3]
\end{definition}
\begin{definition}{Foo}
\lipsum[2]
\end{definition}
\begin{definition}{Bar}
\lipsum[2]
\end{definition}
\begin{definition}{Foo Bar}
\lipsum[2]
\end{definition}
\end{document}