有没有办法制作包裹自治可以使用子方程吗?在下面的例子中,引用将正确读取方程 1,但没有在方程后附加任何数字(我希望看到 1a、1b)。
\documentclass[11pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{cleveref}
\usepackage{autonum}
\begin{document}
\begin{subequations}
\label{eq:subequations}
\begin{align}
1 + 1 = 2, \\
2 + 2 = 4
\end{align}
\end{subequations}
Let us examine \cref{eq:subequations}.
\end{document}
答案1
appto
这很有趣。我相信我有一个利用包中的命令的有效解决方案etoolbox
。请注意,建议在使用时加载hyperref
包(我也选择使用该选项)。hypertexnames=false
autonum
hidelinks
该autonum
包仅在实际引用该方程时才会生成方程编号,因此我们需要一种在以静默方式引用子方程环境中的所有方程时引用该环境的方法。我们可以通过定义自己的引用命令来实现这一点,该命令接受标签但不执行任何操作,然后使用\autonum@generatePatchedReference
包提供的宏告诉 autonum 包它是引用命令。
\documentclass[11pt,a4paper]{article}
\usepackage{amsmath}
\usepackage[hypertexnames=false, hidelinks]{hyperref} % hypertexnames=false for autonum compatibility (autonum.pdf 3.2 Hyperref)
\usepackage{cleveref}
\usepackage{autonum}
\usepackage{etoolbox} % \appto (etoolbox.pdf 3.3 Hook management)
\newcommand\toplabel[2]{% Args: macro and label for subequations environment
\appto{#1}{(\ref{#2})}%
}
\newcommand\sublabel[2]{% Args: macro and label for a subequation
\appto{#1}{\hoaxref{#2}}% Pretend to reference this equation when #1 is called, to fool autonum
}
\newcommand\hoaxref[1]{%
% Do nothing!
}
\makeatletter
\autonum@generatePatchedReference{hoaxref} % Tell autonum about our reference command (autonum.pdf 3.3 Reference commands)
\makeatother
\begin{document}
\begin{subequations}
\label{eq:1}
\begin{align}
1 + 1 &= 2 \label{eq:1a}\\
2 + 2 &= 4\label{eq:1b}
\end{align}
\end{subequations}
\toplabel{\referone}{eq:1}%
\sublabel{\referone}{eq:1a}%
\sublabel{\referone}{eq:1b}%
Let us examine system \referone.
\begin{subequations}
\label{eq:2}
\begin{align}
3 + 3 &= 8 \label{eq:2a}\\
4 + 4 &= 8\label{eq:2b}
\end{align}
\end{subequations}
For comparison, an ordinary reference to system \ref{eq:2}.
\end{document}
输出:
使用说明:以通常的方式标记子方程式环境方程式。然后,在此环境下,设置一个宏来引用环境,\toplabel{\myMacroName}{subeq:label}
然后\sublabel{\myMacroName}{a:sub:equation}
为每个希望编号的子方程式(不必是所有子方程式!)。以下\myMacroName
是您将用来引用子方程式环境的内容,如示例所示。