我对 \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}