当我同时使用 caption 和 floatrow 时,如何让 hyperref 显示整个图形?

当我同时使用 caption 和 floatrow 时,如何让 hyperref 显示整个图形?

我用标题我的文档中的包来控制图形和表格上标题的外观(小文本,带有粗体标签):

\usepackage[font=small, labelfont=bf]{caption}

我用超链接以便\listoffigures在 PDF 中生成超链接。在我的文档中,标题位于其各自的表格和图片上方,并且超链接可以正确导航,这样标题和图片都可以在屏幕上看到。

这种组合效果很好,直到我引入浮行对图表内容应用统一的格式(小文本,在页边距内居中,标题仍在顶部):

\usepackage[font=small, margins=centering, style=plaintop]{floatrow}

有了这项添加,超链接的导航方式使得标题超出了屏幕顶部。我以前读过关于这个问题的文章,但我读到的所有内容(示例 1示例 2)建议使用标题超链接或使用氢化物包。我已经在做前者了,后者没有效果。另一方面,这个问题的其他实例似乎都是在标题为以下图像和图像不在屏幕上,而不是字幕上。

如果我删除任何一个浮行或者标题,链接指向正确的位置,但当然,我会丢失每个包提供的相应格式更改。我怎样才能获得我想要的所有格式,同时仍让链接指向正确的位置?

\documentclass{report}
\usepackage{hyperref}
\usepackage[font=small, labelfont=bf]{caption}
\usepackage[font=small, margins=centering, style=plaintop]{floatrow}

\usepackage{mwe, lipsum}

\begin{document}

\listoffigures

\clearpage

\lipsum[1]
\begin{figure}[h]
  % Links should navigate here.
  \caption{This is a figure}
  \label{figure1}
  % Links should not navigate here.
  \includegraphics{example-image}
\end{figure}
\lipsum[1]

\end{document}

答案1

我无法得到标题浮行一起工作,所以我通过删除后者的包并手动实现要求来避免冲突:

  • 浮动内容应该居中,因此关于如何自动居中图像的一些建议\@floatboxreset并在文档序言中修改:

    \makeatletter
    \g@addto@macro\@floatboxreset{\centering}
    \makeatother
    

    或者更简洁一点使用电子工具箱

    \gappto\@floatboxreset{\centering}
    
  • 浮动文本应该很小;我们可以在文档中使用的特定环境的开头实现这一点。同样,使用电子工具箱

    \BeforeBeginEnvironment{tabular}{\small}
    \BeforeBeginEnvironment{longtable}{\small}
    \BeforeBeginEnvironment{tikzpicture}{
        \tikzset{
            node font=\small,
        }
    }
    

    关于更改图例字体大小的相关问题其中的答案涉及与前面描述的居中更改类似的解决方案,我们重新定义或修补\@floatboxreset,但它们似乎对我不起作用。我的解决方案可能会改变恰好使用表格环境的其他文档组件的字体大小(\maketitle例如 的作者部分),但就我而言,我很幸运地避免了任何问题。

相关内容