使用超目标进行交叉引用的问题

使用超目标进行交叉引用的问题

我遇到了一些与我之前的问题答案的应用相关的问题,这些问题可以在这里

下面有一个 MWE,我在这里\clearpage广泛使用,因为我注意到当\hypertarget它不能正常工作时,它会链接到文档的第一页。

问题:
当我使用[\hypertarget{...}{...}]along with\begin{proof}或 时\begin{namedtheorem},文本中不会出现额外的圆括号。

但是,当我将它与\begin{step}\begin{claim}或一起使用时\begin{myclaim},会出现两个额外的圆形括号。

有没有什么办法可以去掉那些圆形牙套?

\documentclass[12pt]{article}

\usepackage{amsthm,xcolor}
\usepackage[colorlinks, linkcolor=red]{hyperref}
\usepackage[noabbrev,nameinlink]{cleveref}

\theoremstyle{plain}
\newtheorem{theorem}{Theorem}

\theoremstyle{remark}
\newtheorem{claim}{Claim}
\newtheorem*{myclaim}{Claim}
\newtheorem{step}{Step}

\newtheoremstyle{named}%
    {}{}{\itshape}{}{\bfseries}{.}{.5em}{\thmnote{#3}}
\theoremstyle{named}
\newtheorem*{namedtheorem}{Theorem}

\newcommand{\aref}[2][blue]{%
    \begingroup%
    \hypersetup{linkcolor=#1}%
    \cref{#2}%
    \endgroup}
\newcommand\bref[3][blue]{%
    \begingroup%
    \hypersetup{linkcolor=#1}%
    \hyperlink{#2}{#3}%
    \endgroup}

\begin{document}

\section{One}

LaTeX Problems. 

\clearpage

\section{Two} \label{section:two}

\begin{theorem}[Bla]\label{thm:bla}
Bla.
\end{theorem}

\begin{proof}[\hypertarget{proof:1}{Proof.}]
Bla
\end{proof}

\begin{namedtheorem}[\hypertarget{thm:mystery}{Mystery theorem}]
A mysterious theorem
\end{namedtheorem}

\begin{proof}
\begin{step}[\hypertarget{step1}{}]
Here step 1.
\end{step}

\begin{step}
Here step 2.
\end{step}

\begin{claim}[\hypertarget{claim1}{}]
A numbered claim.
\end{claim}
\end{proof}

\clearpage

\begin{theorem}
Bla bla 
\end{theorem}

\begin{proof}
\begin{myclaim}[\hypertarget{myclaim}{}]
An unnumbered claim.
\end{myclaim}
\end{proof}

\clearpage

\section{Three}

In \cref{section:two}, we have both a \aref{thm:bla}, a \bref{proof:1}{proof}, \bref{step1}{step 1}, a numbered \bref{claim1}{claim 1}, and a single \bref{myclaim}{claim}.

\end{document}

感谢您的时间。

答案1

你写了:

但是,当我将它与\begin{step}\begin{claim}或一起使用时\begin{myclaim},会出现两个额外的圆括号。

有没有什么办法可以去掉那些圆形牙套?

不要\hypertarget{...}{}用方括号([])将相应的语句括起来。否则,amsthm将把材料解释为指示相应定理类环境的可选“标题”。换句话说,只有当的第二个参数\hypertarget非空时才使用方括号。

更好地理解这一点的另一种方法是考虑代码中第二个参数\hypertarget非空的两种情况:

\begin{proof}[\hypertarget{proof:1}{Proof.}]

\begin{namedtheorem}[\hypertarget{thm:mystery}{Mystery theorem}]

在这些情况下,方括号向 LaTeX 表明应分别使用“证明。”和“神秘定理”作为相应环境的标题。但

\begin{step}\hypertarget{step1}{}
\begin{claim}\hypertarget{claim1}{}
\begin{myclaim}\hypertarget{myclaim}{}

这就是为什么你不应该提供方括号。

您还写道:

下面有一个 MWE,我在这里\clearpage广泛使用,因为我注意到当\hypertarget它不能正常工作时,它会链接到文档的第一页。

发生这种情况时,请尝试在环境或通过和\phantomsection交叉引用的其他项目之前立即插入指令。\hypertarget\hyperlink

答案2

编号实体不需要额外的\hypertarget,因为hyperref的位置已经设​​置了一个锚点\refstepcounter。 A\label足以捕获锚点。\hyperref[<label>]{<text>}可用于设置指向标签的任意文本。

未编号的实体更棘手。由于通常没有锚点,可以使用 放置锚点\phantomsection。位置是棘手的部分。由于存在问题,定理环境的可选参数不是最佳选择。以下示例将锚点设置在垂直列表中第一段带有定理标题的段落通过 实现\vadjust pre{...},这是 pdfTeX 引擎的一个功能。

\documentclass[12pt]{article}

\usepackage{amsthm,xcolor}
\usepackage[colorlinks, linkcolor=red]{hyperref}
\usepackage[noabbrev,nameinlink]{cleveref}

\theoremstyle{plain}
\newtheorem{theorem}{Theorem}

\theoremstyle{remark}
\newtheorem{claim}{Claim}
\newtheorem*{myclaim}{Claim}
\newtheorem{step}{Step}

\newtheoremstyle{named}%
    {}{}{\itshape}{}{\bfseries}{.}{.5em}{\thmnote{#3}}
\theoremstyle{named}
\newtheorem*{namedtheorem}{Theorem}

\newcommand{\aref}[2][blue]{%
  \begingroup%
    \hypersetup{linkcolor={#1}}%
    \cref{#2}%
  \endgroup
}
\newcommand\bref[3][blue]{%
  \begingroup%
    \hypersetup{linkcolor={#1}}%
    % \hyperlink{#2}{#3}%
    \hyperref[{#2}]{#3}%
  \endgroup
}

\newcommand*{\vprelabel}[1]{%
  \leavevmode
  \vadjust pre{\phantomsection\label{#1}}%
  \ignorespaces
}

\begin{document}

\section{One}

\LaTeX\ problems are hopefully solved more or less.

\clearpage

\section{Two} \label{section:two}

\begin{theorem}[Bla]\label{thm:bla}
Bla.
\end{theorem}

\begin{proof}[Proof.]
\vprelabel{proof:1}
Bla
\end{proof}

\begin{namedtheorem}[Mystery theorem]
\label{thm:mystery}
A mysterious theorem
\end{namedtheorem}

\begin{proof}
\begin{step}
\label{step1}
Here step 1.
\end{step}

\begin{step}
Here step 2.
\end{step}

\begin{claim}
\label{claim1}
A numbered claim.
\end{claim}
\end{proof}

\clearpage

\begin{theorem}
Bla bla
\end{theorem}

\begin{proof}
\begin{myclaim}
\vprelabel{myclaim}
An unnumbered claim.
\end{myclaim}
\end{proof}

\clearpage

\section{Three}

In \cref{section:two}, we have both a \aref{thm:bla}, a
\bref{proof:1}{proof}, \bref{step1}{step 1}, a numbered \bref{claim1}{claim
1}, and a single \bref{myclaim}{claim}.

\end{document}

相关内容