thmtools 定理列表中的章节标题

thmtools 定理列表中的章节标题

thmtools包提供了一个\listoftheorems生成定理/定义/等的列表的命令。

以下是 MWE:

平均能量损失

\documentclass[12pt]{article}
\usepackage{amsthm,thmtools}

\newtheorem{thm}{Theorem}[section]
\newtheorem{defn}{Definition}[section]

\renewcommand{\listtheoremname}{List of definitions}

\begin{document}

\listoftheorems[ignoreall,show={defn}]

\section{First Section}

\begin{defn}[Some definition]
definition text
\end{defn}

\section{Second Section}

\begin{thm}[Some Theorem]
theorem text
\end{thm}

\section{Third Section}

\begin{defn}[Another definition]
definition text
\end{defn}

\begin{defn}
definition without title
\end{defn}

\begin{thm}
theorem without title
\end{thm}

\end{document}

问题:我想在定义列表。期望的效果大致如下:

1. 第一部分

1.1 定义(一些定义)..................................... 1

3. 第三部分

3.1 定义(另一种定义)..................................... 1

3.2 定义................................................................ 1

我一直在尝试采纳这个优秀的答案,但收效甚微。建议的解决方案是对注释文件中章节分隔符的命令etoolbox进行修补(通过);困难在于没有用于注释章节的等效命令。查看\thmtlothmtools.loe\thmtools\thmtools 文档,相关命令定义在第 29 页第 770 行。我天真的尝试模拟 MWE 序言中的那块代码,其中我基本上只是用“section”替换每个出现的“chapter”;即包括以下代码:

\makeatletter
\def\thmtlo@oldsection{0}%
\newcommand\thmtlo@sectionvspacehack{}
\ifcsname c@section\endcsname
  \ifx\c@section\relax\else
    \def\thmtlo@sectionvspacehack{%
      \ifnum \value{section}=\thmtlo@oldsection\relax\else
            \addtocontents{loe}{\protect\thmlopatch@endsection\protect\thmlopatch@section{\thesection}}%
        \xdef\thmtlo@oldsection{\arabic{section}}%
      \fi
}%
    \fi
\fi
\makeatother

遗憾的是,这根本不起作用,因为.loe文件保持不变。

答案1

如果您仍在尝试解决这个问题,我找到了一种方法。

首先,在 thm-listof.sty 文件中,您必须注释掉此行:

\addtocontents{loe}{\protect\addvspace{10\p@}}%

然后,使用 etoolbox(可能还有一些我忘记的其他包),将其添加到 .tex 文件的标题中:

\makeatletter
\def\thischaptertitle{}\def\thischapternumber{}
\newtoggle{nothms}

\apptocmd{\@chapter}%
  {\gdef\thischaptertitle{#1}\gdef\thischapternumber{\thechapter}%
    \global\toggletrue{nothms}}{}{}

\AtBeginDocument{%
  \AtBeginEnvironment{definition}{%
    \iftoggle{nothms}{
      \addtocontents{lof}{\protect\contentsline {chapter}%
        {\protect\numberline {\thischapternumber} {\thischaptertitle}}{}{} }
      \global\togglefalse{nothms}
    }{}
  }%
}

\makeatother

只要章节中的第一个条目是定义,这种方法就行得通。一旦我写完论文,我可能会添加一个可行的示例。

相关内容