\autoref 和子方程

\autoref 和子方程

我对 \autoref 和子方程环境有疑问。我在 \autoref 的方程引用周围添加了 ()(如解释的那样这里),它与正规方程配合得很好。另一方面,当我使用子方程环境时,出现了一个问题:表示子方程的字母在括号之外,例如,我在参考文献和方程中都有 (3.1)a。

在序言中,我

\makeatletter
\let\oldtheequation\theequation
\renewcommand\tagform@[1]{\maketag@@@{\ignorespaces#1\unskip\@@italiccorr}}
\renewcommand\theequation{(\oldtheequation)}
\makeatother

我想要的是 (3.1a),既用于方程式也用于参考。我想我必须修改上面报告的代码,但我不知道该怎么做。

答案1

我决定修改\autoref而不是\theequation。我的方法是将格式添加到名称定义中,以便也可以实现所有子图格式。这不是很有效,但用户更容易修改。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xstring}
\usepackage{hyperref}

\def\equationmyref#1{Equation~(\ref*{#1})}% Note: \eqref* not defined
\def\AMSmyref#1{Equation~(\ref*{#1})}% for \tag
\def\figuremyref#1{\figurename~\ref*{#1}}%
\def\tablemyref#1{\tablename~\ref*{#1}}%
\def\partmyref#1{\partname~\ref*{#1}}%
\def\appendixmyref#1{\appendixname~\ref*{#1}}%
\def\theoremmyref#1{Theorem~\ref*{#1}}%

\makeatletter
\newif\ifmyrefstar

\def\myref{\@ifstar{\myrefstartrue\my@ref}{\myrefstarfalse\my@ref}}% handkr \autoref* arguments

\newcommand{\my@ref}[1]{\@ifundefined{r@#1}{??}% #1 = label name
  {\my@@ref{#1}{\getrefbykeydefault{#1}{anchor}{Doc-Start}}}}
  
\newcommand{\my@@ref}[2]% #1 = label, #2 = anchor
{\bgroup
  \StrBefore{#2}{.}[\myrefname]% parse anchor before {.}
  \@ifundefined{\myrefname myref}{\def\my@@@ref##1{\myrefname~\ref*{##1}}}%
    {\expandafter\let\expandafter\my@@@ref\csname\myrefname myref\endcsname}%
  \ifmyrefstar
    \my@@@ref{#1}%
  \else
    \hyperlink{#2}{\my@@@ref{#1}}%
  \fi
\egroup}
\makeatother

\let\autoref=\myref

\begin{document}
\begin{subequations}
\begin{equation}\label{test}
  a=b
\end{equation}
\end{subequations}
\autoref{test}
\autoref*{test}
\end{document}

相关内容