对于我的一个文档,我使用以下命令来设置我的定理环境amsthm
:
\usepackage{xcolor}
\usepackage{framed}
\colorlet{shadecolor}{lightgray!25}
\newtheoremstyle{definitionsty}{3pt}{3pt}{\slshape}{}{\bfseries}{.}{.5em}{}
\theoremstyle{definitionsty}
\newtheorem{tdefn}{Definition}[chapter]
\newenvironment{defn}
{\begin{shaded}\begin{tdefn}}
{\end{tdefn}\end{shaded}}
然后我能够通过定义某些内容\begin{defn}[My Hilarious Definition] blabla\end{defn}
,我想在附录末尾或目录和第一章之间包含一个列表,其中包含基于与其页面对应的章节的定义名称和编号,即
Chapter 1 (Kapitel 1 because this is a german document)
Definition 1.1 - My Hilarious Thing .......... 2
Definition 1.2 - Another Super Duper Thingy .. 4
...
Chapter 2 (aka. Kapitel 2)
Definition 2.1 - Math on Crack ............... 27
然而我只想要定义,因为我真的无法说出所有常用的定理,所以我不得不在这个列表中省略它们。
有人能建议一个关于如何创建此类列表的好代码吗?
答案1
这thmtools
包提供了“定理列表”。但是它默认不提供打印“第 n 章”的功能,而且还有一个问题,即只应显示设置了定义的章节。
thmtools
所以情况是这样的:我必须修补用于注释文件中章节分隔符的命令.loe
。而不是\addvspace{10pt}
让它添加更多内容。
这样,.loe
文件中的每个章节都被
\thmlopatch@chapter
...
\thmlopatch@endchapter
因此可以将 表示的部分排版到...
框中,以查看是否有结果。因为我们将调用
\listoftheorems[ignoreall,show={tdefn}]
只有定义会保留下来。如果框中有内容,则内容会重新排版,并在前面加上“第 n 章”。
可选名称的排版方式也发生了改变(\thmformatoptarg
)。
\documentclass[a4paper]{book}
\usepackage{amsthm,thmtools}
\usepackage{xcolor}
\usepackage{framed}
\colorlet{shadecolor}{lightgray!25}
\newtheorem{thm}{Theorem}[chapter]
\newtheoremstyle{definitionsty}{3pt}{3pt}{\slshape}{}{\bfseries}{.}{.5em}{}
\theoremstyle{definitionsty}
\newtheorem{tdefn}{Definition}[chapter]
\newenvironment{defn}
{\begin{shaded}\begin{tdefn}}
{\end{tdefn}\end{shaded}}
\usepackage{etoolbox}
\makeatletter
\patchcmd\thmtlo@chaptervspacehack
{\addtocontents{loe}{\protect\addvspace{10\p@}}}
{\addtocontents{loe}{\protect\thmlopatch@endchapter\protect\thmlopatch@chapter{\thechapter}}}
{}{}
\AtEndDocument{\addtocontents{loe}{\protect\thmlopatch@endchapter}}
\long\def\thmlopatch@chapter#1#2\thmlopatch@endchapter{%
\setbox\z@=\vbox{#2}%
\ifdim\ht\z@>\z@
\hbox{\bfseries\chaptername\ #1}\nobreak
#2
\addvspace{10\p@}
\fi
}
\def\thmlopatch@endchapter{}
\makeatother
\renewcommand{\thmtformatoptarg}[1]{ -- #1}
\renewcommand{\listtheoremname}{List of definitions}
\begin{document}
\frontmatter
\listoftheorems[ignoreall,show={tdefn}]
\mainmatter
\chapter{X}
\begin{defn}[My hilarious definition]
bla bla
\end{defn}
\chapter{Y}
\begin{thm}
b
\end{thm}
\chapter{Z}
\begin{defn}[My hilarious definition 2]
bla bla
\end{defn}
\begin{thm}
a
\end{thm}
\end{document}
请注意,第 2 章中有一个定理,但没有定义,因此它不会列在“定义列表”中。
如果要自定义列表中条目的外观,请添加
\def\ll@tdefn{%
\protect\thmtopatch@numbernametext
\ifx\@empty\thmt@shortoptarg\else[\thmt@shortoptarg]\fi
{\csname the\thmt@envname\endcsname}%
{\thmt@thmname}%
}
\newcommand\thmtopatch@numbernametext[3][]{%
#3 #2%
\if\relax\detokenize{#1}\relax\else\space -- #1\fi
}
在\makeatother
上面的代码中。这将打印
定义 1.1 – 我的搞笑定义...... 1
在 的定义中\thmtopatch@numbernametext
,#1
代表(可选)名称(“我的搞笑定义”)、#2
环境名称(“定义”)和#3
数字。
对于表单的输出
1.1 – 我的搞笑定义............ 1
你可能会定义
\newcommand\thmtopatch@numbernametext[3][]{%
#2 -- %
\if\relax\detokenize{#1}\relax #3\else #1\fi
}
因此,没有可选名称参数的定义将被打印为
3.1 – 定义 ................. 42
答案2
amsthm
这是一个使用定理类结构的原始定义和 LaTeX 内核\@starttoc
命令的解决方案;该etoolbox
包用于包含新定义列表中包含定义的章节的信息;只有包含定义的章节才会包含在此新列表中。
带有注释的定义条目将使用以下格式列出
Definition <Number> Note ......<page number>
通用定义(不使用可选参数作为注释)将列为:
Definition <Number> ...........<page number>
代码如下:
\documentclass{book}
\usepackage{amsthm}
\usepackage{etoolbox}
\usepackage{xcolor}
\usepackage{framed}
\colorlet{shadecolor}{lightgray!25}
\newtheoremstyle{definitionsty}{3pt}{3pt}{\slshape}{}{\bfseries}{.}{.5em}{\addcontentsline{lod}{section}{#1~\protect\numberline{#2}{#3}}}
\theoremstyle{definitionsty}
\newtheorem{tdefn}{Definition}[chapter]
\newenvironment{defn}
{\begin{shaded}\begin{tdefn}}
{\end{tdefn}\end{shaded}}
\makeatletter
% A command to create the new List of Definitions
\newcommand\listofdefinitions{%
\chapter*{List Of Definitions}\@starttoc{lod}}
% initial definitions to save the chapter info (name and number)
\def\thischaptertitle{}
\def\thischapternumber{}
\newtoggle{noDefs}
\apptocmd{\@chapter}%
{\gdef\thischaptertitle{#1}\gdef\thischapternumber{\thechapter}%
\global\toggletrue{noDefs}}{}{}
% the defn environment does the job: the first time it is used after a \chapter command,
% it writes the information of the chapter to the LoD
\AtBeginDocument{%
\AtBeginEnvironment{defn}{%
\iftoggle{noDefs}{
\addcontentsline{lod}{chapter}{\chaptername~\thischapternumber\hspace{1em}\thischaptertitle}{}
\global\togglefalse{noDefs}
}{}
}%
}
\makeatother
\begin{document}
\listofdefinitions
\chapter{Test Chapter With Definitions}
\begin{defn}[My Hilarious Thing]
Definition 1.2 - Another Super Duper Thingy
Test
\end{defn}
\begin{defn}[A Super Duper Thingy]
Test
\end{defn}
\chapter{Test Chapter Without Definitions}
\chapter{Another Test Chapter With Definitions}
\begin{defn}[Another Super Duper Thingy]
Test
\end{defn}
\begin{defn}
Test
\end{defn}
\end{document}
答案3
ntheorem
这是使用包及其命令的解决方案\listtheorems
。格式不是最佳的,但您可以自行修复。
\documentclass{book}
\usepackage{amsmath}
\usepackage[standard,amsmath]{ntheorem}
\numberwithin{Theorem}{chapter}
\numberwithin{Definition}{chapter}
\let\oldchapter\chapter
\def\chapter#1{\oldchapter{#1}\addtotheoremfile[Definition]{\newline
\textbf{Chapter \thechapter \qquad #1}}}
\begin{document}
\chapter{Test}
\begin{Theorem}[False Theorem]
This is not a theorem
\end{Theorem}
\begin{Definition}[A definition]
Something
\end{Definition}
List of theorems:
\listtheorems{Theorem}
List of definitions:
\listtheorems{Definition}
\end{document}
示例输出:
诀窍是
- 用于
\listtheorems{Definition}
仅列出定义,而不列出其他定理环境 - 修改的定义
\chapter
,以便每个新章节都会在定义列表中写入适当的标题。
您应该查阅文档的第 2.4 节ntheorem
以了解有关用法的更多信息,并使用新的\chapter
定义来根据您的喜好格式化章节标题。