我在序言中给出了以下创建boxalign*
环境的代码,这是一个盒装align*
环境。
\makeatletter % Code for the boxalign* environment
% \newcommand\boxalign*autorefname{Box}
\@fleqntrue{}
\usepackage{empheq}
\newenvironment{boxalign*}{\@fleqntrue\empheq[box=\fbox]{align*}}{\endempheq}
\@fleqnfalse{}
\makeatother
但是,我想引用此框,但hyperref
无法识别环境,因此无法创建超链接。例如:
\documentclass{article}
\usepackage{hyperref}
\usepackage{mathtools}
\makeatletter % Code for the boxalign* environment
% \newcommand\boxalign*autorefname{Box}
\@fleqntrue{}
\usepackage{empheq}
\newenvironment{boxalign*}{\@fleqntrue\empheq[box=\fbox]{align*}}{\endempheq}
\@fleqnfalse{}
\makeatother
\begin{document}
\begin{boxalign*}\label{eq:linear_equation}
y &= ax + b \\
\frac{y - b}{a} &= x
\end{boxalign*}
This \hyperref[eq:linear_equation]{hyperref} doesn't work.
\end{document}
我看见这个帖子这似乎对我的问题有一个答案,这就是我尝试添加该\newcommand\boxalign*autorefname{Box}
行的原因,但它不起作用(所以我把它注释掉了)。
我怎样才能做到这一点?
答案1
您可以使用其他名称来欺骗数学环境以允许 \label 命令。您还应该设置 \phantomsection,以便链接有一个目标:
\documentclass{article}
\usepackage{hyperref}
\usepackage{mathtools}
\makeatletter % Code for the boxalign* environment
% \newcommand\boxalign*autorefname{Box}
\@fleqntrue{}
\usepackage{empheq}
\newenvironment{boxalign*}{\@fleqntrue\empheq[box=\fbox]{align*}\phantomsection}{\endempheq}
\@fleqnfalse{}
\makeatother
\begin{document}
\let\mylabel\label
\begin{boxalign*}\mylabel{eq:linear_equation}
y &= ax + b \\
\frac{y - b}{a} &= x
\end{boxalign*}
This \hyperref[eq:linear_equation]{hyperref} doesn't work.
\end{document}
答案2
Ulrike Fischer 的答案的另一种方法是将标签作为可选参数传递。
\documentclass{article}
\usepackage{mathtools}
\makeatletter % Code for the boxalign* environment
\@fleqntrue
\usepackage{empheq}
\NewDocumentEnvironment{boxalign*}{o}
{%
\@fleqntrue\empheq[box=\fbox]{align*}%
\IfValueT{#1}{\phantomsection}%
}
{%
\endempheq
\IfValueT{#1}{\label{#1}}%
}
\@fleqnfalse
\makeatother
\usepackage{hyperref}
\begin{document}
Some text before the alignment
\begin{boxalign*}[eq:linear_equation]
y &= ax + b \\
\frac{y - b}{a} &= x
\end{boxalign*}
\newpage
This \hyperref[eq:linear_equation]{hyperref} works.
\end{document}