使用 hyperref 引用自定义环境

使用 hyperref 引用自定义环境

我在序言中给出了以下创建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}

相关内容