我正在尝试使用原生的 Memoirsubbottom
命令。但是,我无法让hyperref
链接跳转到“图片”,而不是“标题”。只有指向 (a) 和 (d) 的链接可以正常工作。
\documentclass[a4paper,14pt]{memoir}
\usepackage{graphicx}
\usepackage{hyperref}
% \usepackage[all]{hypcap}
\newsubfloat{figure} % allows to use "subbottom"
\begin{document}
This link jumps to the figure caption: \ref{fig:1}.
% This one could be fixed with "\usepackage[all]{hypcap}",
% but is it the correct approach?
This link jumps to the picture (the way I like): \ref{sf:1}.
This link jumps to slightly-above-subcaption: \ref{sf:2}.
This link jumps to slightly-above-subcaption: \subcaptionref{sf:3}, same as \ref{sf:3}.
This link jumps to the picture (the way I like): \ref{sf:4}.
This link jumps to slightly-above-subcaption: \ref{sf:5}.
\begin{figure}
\centering
% \hfill % if uncommented, link to sf:1 jumps to incorrect vertical position too. Why?
\subbottom[Subfigure 1\label{sf:1}]{\includegraphics[width=3cm]{example-image-a}}
\hfill
\subbottom[Subfigure 2\label{sf:2}]{\includegraphics[width=3cm]{example-image-b}}
\hfill
\subbottom[\label{sf:3}Subfigure 3]{\includegraphics[width=3cm]{example-image-c}}
\\
\subbottom[Subfigure 4\label{sf:4}]{\includegraphics[width=3cm]{example-image-b}}
\hfill
\subbottom[\label{sf:5}Subfigure 5]{\includegraphics[width=3cm]{example-image-a}}
\caption{Figure with five subfigures\label{fig:1}}
\end{figure}
\clearpage
This text is here to add more space for scrolling.
\end{document}
这是我看到的结果(TexLive 2018,Windows 10):
我的示例与文档(图 10.19 于 v3.7g 版本,2018/04/04)。而且看起来问题出在 docs pdf 本身上。
类似代码,利用subcaptionbox
即可。并且“超链接跳转到哪里?“在subcaption 包文档。但似乎subcaptionbox
不鼓励与 Memoir 一起使用 - 会生成以下警告:
您正在使用带有 memoir 类的 caption 包。为了做好准备,我们现在将所有字幕宏和配置重置为内核默认值,然后让 caption 包接管。请记住使用 caption 包接口来配置您的字幕。
难道我做错了什么?
caption
除了使用和subcaption
包之外,还有其他方法可以让链接跳转到“图片”吗?
答案1
这是一个更合适的补丁,它可以做正确的事情(将 refstepcoocounter 移入格式)。它已经用、和进行了测试,\subbottom
并且\contsubbottom
锚点\subtop
似乎\contsubtop
做了正确的事情
[sub optimal version removed]
编辑
这个看起来更简单。我们在 的开头添加步数计数器\vtop
,这会让锚点比内容略高,这样看起来会更好。它与 和 一起工作没有 hyperref
,早期版本没有。我也会看看\subcaption
。
\usepackage{xpatch}
\makeatletter
% less typing
\newcommand\mem@step@subcounter{%
\refstepcounter{sub\@captype}\@contkeep%
}
\xpatchcmd{\@memsubbody}%
{\refstepcounter{sub\@captype}\@contkeep}% search pattern
{}% replacement
{\typeout{@memsubbody is patched}}%
{\typeout{@memsubbody is NOT patched}}%
\xpatchcmd{\@memcontsubbody}%
{\refstepcounter{sub\@captype}\@contkeep}% pattern
{}% replacement
{\typeout{@memcontsubbody is patched}}%
{\typeout{@memcontsubbody is NOT patched}}%
\xpatchcmd{\@memsubfloat}%
{\vtop\bgroup}% search pattern
{\vbox\bgroup\mem@step@subcounter}% replacement
{\typeout{@memsubfloat patch is ok}}%
{\typeout{@memsubfloat patch is NOT ok}}%
\makeatother
为了\subcaption
\xpatchcmd{\subcaption}%
{\refstepcounter{sub\@captype}}% search pattern
{\H@refstepcounter{sub\@captype}}% replacement
{\typeout{subcaption second patch is ok}}%
{\typeout{subcaption second patch is NOT ok}}%
下都可以使用hypcap
,只是注意链接名称会错误。