我想在报告类中生成以下样式的子方程编号:
主要方程式均有编号,可供参考。
每个子方程式都用小写字母标记。这些标签垂直对齐。
当引用子方程时,会显示其完整路径(例如,“方程 (1b)...”)。
这是我在一篇论文中找到的一个例子(不需要花括号):
(出自:Hans-Georg Beyer、Bernhard Sendhoff,《稳健优化 - 综合调查》,《应用力学和工程中的计算机方法》,第 196 卷,第 33-34 期,2007 年 7 月 1 日,第 3190-3218 页)
此代码产生标准样式:
\documentclass{report}
\usepackage{amsmath}
\usepackage[colorlinks=true,linkcolor=blue]{hyperref}
\begin{document}
\ldots can be stated as:
\begin{subequations}
\label{main_eq}
\begin{align}
\label{sub_eq1}\text{optimize:}\quad &f(x),\\
\label{sub_eq2}\text{subject to:}\quad &g(x)\leq0,\\
\label{sub_eq3}&h(x)=0,
\end{align}
\end{subequations}
where~\eqref{sub_eq2} represents an inequality constraint and~\eqref{sub_eq3} an equality constraint.
\ldots the optimum of $f(x)$ in~\eqref{main_eq}, like NP-hardness in\ldots
\end{document}
答案1
这是一个尝试;请注意,约束之间用分号分隔。
\documentclass{report}
\usepackage{amsmath,array,xparse}
\usepackage[colorlinks=true,linkcolor=blue]{hyperref}
\newcounter{optproblemline}
\renewcommand{\theoptproblemline}{\alph{optproblemline}}
\makeatletter
\renewcommand{\p@optproblemline}{\theequation}
\makeatother
\ExplSyntaxOn
\NewDocumentCommand{\optproblem}{ m m }
{
\shaul_opt_problem:n { #2 }
\setcounter{optproblemline}{0}%
\left.
\cs_set_eq:Nc \label { ltx@label } % in a group, reset \label
\begin{array}{
@{}
l
@{\quad}
>{\refstepcounter{optproblemline}}l
>{\textnormal{(\theoptproblemline)}}l
}
\textnormal{optimize:}&\\
\textnormal{subject~to:} \tl_use:N \l_shaul_constraints_tl
\end{array}
\right\rbrace
}
\tl_new:N \l_shaul_constraints_tl
\seq_new:N \l_shaul_constraints_seq
\cs_new_protected:Npn \shaul_opt_problem:n #1
{
\tl_clear:N \l_shaul_constraints_tl
\seq_set_split:Nnn \l_shaul_constraints_seq { ; } { #1 }
\seq_map_inline:Nn \l_shaul_constraints_seq
{
\tl_put_right:Nn \l_shaul_constraints_tl { & ##1 & \\ }
}
}
\ExplSyntaxOff
\begin{document}
\ldots can be stated as:
\begin{equation}\label{main_eq}
\optproblem{f(x)\label{sub_eq1}}
{
g(x)\leq0, \label{sub_eq2};
h(x)=0, \label{sub_eq3}
}
\end{equation}
where~\eqref{sub_eq2} represents an inequality constraint and~\eqref{sub_eq3}
an equality constraint.
\ldots the optimum of $f(x)$ in~\eqref{main_eq}, like NP-hardness in\ldots
\end{document}
答案2
工作笔记
目前,我可以向您提供无需amsmath
加载的解决方案。它具有保护功能\label
,但我尚未弄清楚如何规避该保护。
\documentclass{report}
\pagestyle{empty}
%\usepackage{amsmath} % Not working for now...
\usepackage[colorlinks=true,linkcolor=blue]{hyperref}
\usepackage{refcount}
\usepackage{alphalph}
%\let\oldlabel=\label
%\let\oldref=\ref
%\let\oldpageref=\pageref
%\let\label=\oldlabel
%\let\ref=\oldref
%\let\pageref=\oldpageref
\newcounter{malsubeqn}[equation]
\def\mallabel#1{%
\refstepcounter{malsubeqn}%
(\alph{malsubeqn})%
\label{#1}%
%\typeout{\meaning\label}
}% End of \mallabel...
\def\malsubeqref#1{(\hyperref[#1]{%
\theequation\alphalph{\getrefnumber{#1}}%
})}% End of \maleqref...
\def\maleqref#1{(\ref{#1})}
\begin{document}
%\typeout{\meaning\oldlabel}
\ldots can be stated as:
\begin{equation}
\label{main_eq}
%\begin{subequations}
%\begin{aligned}%{rll}
\left.\begin{array}{rll}
\textrm{optimize:}\quad & f(x), & \mallabel{sub_eq1}\\
\textrm{subject to:}\quad & g(x)\leq0,& \mallabel{sub_eq2}\\
& h(x)=0, & \mallabel{sub_eq3}\\
\end{array}\right\}
%\end{align}
%\end{subequations}
\end{equation}
where~\malsubeqref{sub_eq1} is a function to be optimized, \malsubeqref{sub_eq2} represents an inequality constraint and~\malsubeqref{sub_eq3} an equality constraint.\par
\ldots the optimum of $f(x)$ in~\maleqref{main_eq}, like NP-hardness in\ldots
\end{document}