Hypcap 无法与自定义图形环境一起使用

Hypcap 无法与自定义图形环境一起使用

我尝试使用captionwithhypcap=true以便交叉引用超链接指向图形而不是图形标题。但是,我使用的multicol环境带有自定义图形环境,以便浮动元素可以很好地放置在双列文档中。

以下是 MWE:

\documentclass[10pt, letterpaper]{article} 
\usepackage{multicol}
\usepackage[small,bf,hypcap=true]{caption}
\usepackage[demo]{graphicx}
\newenvironment{Figure}
  {\par\medskip\noindent\minipage{\linewidth}}
  {\endminipage\par\medskip}
\usepackage[unicode, bookmarks, colorlinks, breaklinks]{hyperref} 
\usepackage[all]{hypcap} %I don't know if this line is needed

\begin{document}
\begin{multicols}{2}[\section{section1}]
Figure~\ref{fig:fig1}
\begin{Figure}
\centering
\includegraphics[width=\textwidth]{apple.jpg}
\captionof{figure}{caption}
\label{fig:fig1}
\end{Figure}
\end{multicols}
\end{document}

我正在使用 XeLaTeX,但我认为这不会改变任何东西。

答案1

您应该使用float包来使用H位置说明符:

\documentclass{article} 
\usepackage{multicol}
\usepackage[small,bf,hypcap=true]{caption}
\usepackage[demo]{graphicx}
\usepackage{float}
\usepackage[unicode]{hyperref}

\begin{document}
\begin{multicols}{2}[\section{section1}]
Figure~\ref{fig:fig1}
\begin{figure}[H]
\centering
\includegraphics[width=\linewidth]{apple.jpg}
\caption{caption}
\label{fig:fig1}
\end{figure}
\end{multicols}
\end{document}

答案2

您的超链接无法正常工作有两个原因:

  1. 当使用hypcap包时caption,包将不再放置超链接锚点,因为hypcap包负责此任务。所以不要在这里使用它,否则根本不会放置任何超链接锚点,至少包不会放置caption。请参阅包手册中的第 6.6 节“hypcap” caption。(作为可以在此处使用的替代方案\capstart,请参阅hypcap包手册了解详细信息。)

  2. 使用包时,\captionofcaption知道标题的位置,但不知道图形实际从哪里开始,即应该将超链接锚点放在哪里。因此,请使用\captionsetup{type=figure}来完成此任务,并避免使用\captionof。请参阅包手册中的第 6.5 节“hyperref” caption,尤其是段落“\captionof{...}{...} vs. \captionsetup{type=...}+\caption{...}”

您的示例文档,已修改:

\documentclass[10pt, letterpaper]{article} 
\usepackage{multicol}
\usepackage[small,bf,hypcap=true]{caption}
\usepackage[demo]{graphicx}
\newenvironment{Figure}
  {\par\medskip\noindent\minipage{\linewidth}%
   \captionsetup{type=figure}}% \captionsetup{type=figure} added
  {\endminipage\par\medskip}
\usepackage[unicode, bookmarks, colorlinks, breaklinks]{hyperref} 
%\usepackage[all]{hypcap} % No, this line is not needed

\begin{document}
\begin{multicols}{2}[\section{section1}]
Figure~\ref{fig:fig1}
\begin{Figure}
\centering
\includegraphics[width=\textwidth]{apple.jpg}
\caption{caption} % \captionof replaced by \caption
\label{fig:fig1}
\end{Figure}
\end{multicols}
\end{document}

相关内容