自动生成定理标签

自动生成定理标签

我正在使用包amsthm来定义“定义”环境,如下所示:

\theoremstyle{definition}
\newtheorem{definition}{Definition}

在括号中提供了定义的名称:

\begin{definition}[Modularity]
For a graph $G = (V,E)$ and disjoint communities $\zeta = \{C_1, \dots, C_k \}$ of $G$, \term{modularity} is defined as
$$M(G, \zeta) := \underbrace{\sum_{C \in \zeta} \frac{|E(C)|}{|E|}}_{\text{coverage}} - \underbrace{\sum_{C \in \zeta}   \frac{ \left (  \sum_{v \in C} deg(v) \right )^2}{(2 \cdot |E|)^2}}_{\text{expected coverage}}$$
\end{definition}

现在,我想标记这些定义。我真的必须手动标记\label每个定义吗?如果能够从提供的名称参数自动生成标签,那岂不是很好、很简洁?

答案1

这并不难实现,只需生成一个开始/结束定义amsthm并添加标签的新环境。

\documentclass{article}

\usepackage{amsmath}
\usepackage{amsthm}
\theoremstyle{definition}
\newtheorem{intdef}{Definition}
\newenvironment{definition}[1]{\begin{intdef}[#1]\label{def:#1}}{\end{intdef}}

\begin{document}

    This is the definition:

    \begin{definition}{Modularity}
        For a graph $G = (V,E)$ and disjoint communities $\zeta = \{C_1, \dots, C_k \}$ of $G$, modularity is defined as
        $$M(G, \zeta) := \underbrace{\sum_{C \in \zeta} \frac{|E(C)|}{|E|}}_{\text{coverage}} - \underbrace{\sum_{C \in \zeta}   \frac{ \left (  \sum_{v \in C} deg(v) \right )^2}{(2 \cdot |E|)^2}}_{\text{expected coverage}}$$
    \end{definition}

    See Definition~\ref{def:Modularity}. 
\end{document}

但要警惕其缺点:

  • 如果您稍后选择更改定义的标题,则所有引用都将被破坏。
  • 大多数 IDE(至少是 TeXStudio)无法自动完成这些参考名称。
  • 定义的名称将受到限制:您不能使用宏等等。例如,无法创建$\chi$ Theorem

相关内容