![自动生成定理标签](https://linux22.com/image/325349/%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90%E5%AE%9A%E7%90%86%E6%A0%87%E7%AD%BE.png)
我正在使用包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