我目前正在使用以下方法在笔记文档(文章类)中定义术语
\newtheorem{mydef}{Definition}
在序言中,并定义其中的术语
\begin{mydef}
\textbf{Term} is ...
\endmydef}
我想知道是否有一种简单的方法可以创建一个与生成的定义相当的定义列表
\tableofcontents
使用类似的自定义命令?所有定义的内容样式列表会很有帮助,在 mydef 定理环境中创建的整个文档中重新打印所有定义的命令也会很有帮助。
答案1
也许是这样的?
我已经使用了托克洛夫特包使用以下命令创建一个新的“定义表”:
\usepackage{tocloft}
\newcommand{\listdefinitionsname}{List of definitions}
\newlistof{definitions}{dfn}{\listdefinitionsname}
然后,我定义了一个新环境defn
,它将在“定义表”中添加一行第一的\textbf{...}
环境中使用了时间。这是通过改变的定义\textbf
来实现的
\addcontentsline{dfn}{section}{\protect\numberline{\thedefinition}#1}%
\realtextbf{#1}%
在defn
环境中。可以说,更好的方法是定义一个新命令,例如\mydefn
:
\newcommand\mydefn[1]{\textbf{#1}%
\addcontentsline{dfn}{section}{\protect\numberline{\thedefinition}#1}}
但我试图忠实于 OP 中的代码片段。
完整代码如下:
\documentclass{article}
\usepackage{tocloft}
\newcommand{\listdefinitionsname}{List of definitions}
\newlistof{definitions}{dfn}{\listdefinitionsname}
% create the new definition environment
\newtheorem{definition}{Definition}
\usepackage{etoolbox}
% an enhanced version of \textbf that adds an entry to list of defs
\let\realtextbf\textbf
\newcommand\answertextbf[1]{%
\addcontentsline{dfn}{section}{\protect\numberline{\thedefinition}#1}%
\realtextbf{#1}%
\let\textbf\real\textbf% reset \textbf to normal
}
\usepackage{xparse}
\NewDocumentEnvironment{defn}{o}{
\let\textbf\answertextbf
\IfNoValueTF{#1}{\definition}{\definition[#1]}
}{\enddefinition}
\begin{document}
\listofdefinitions
\begin{defn}
\textbf{Term 1} is ...
\end{defn}
\begin{defn}[Hi]
\textbf{Term 2} is ...
\end{defn}
\end{document}