如何从目录中的图片链接到 LaTeX 文档中的章节

如何从目录中的图片链接到 LaTeX 文档中的章节

我正在尝试使用这个答案这个答案创建类似以下内容的内容:

在此处输入图片描述

但是,我希望能够从中的图片实际链接到文档中的部分TOC(即,部分下方的图片TOC应该像其他示例图片一样具有红色边界框,表示活动链接)。我尝试使用的代码如下:

\documentclass{article}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage[colorlinks=false,linkcolor=black,bookmarks=false]{hyperref}
\newcommand{\addstufftotoc}[2][toc]{% \addimagetotoc[<toc>]{<stuff>}
  \addtocontents{#1}{#2}}
\begin{document}

\tableofcontents

Click to learn more:\\

  \hyperref[sec:A]{\includegraphics[height=5\baselineskip]{example-image-a}}\qquad
  \hyperref[sec:B]{\includegraphics[height=5\baselineskip]{example-image-b}}\qquad
  \hyperref[sec:C]{\includegraphics[height=5\baselineskip]{example-image-c}}

\section{Section A}\label{sec:A}
\addstufftotoc{\nobreak\smallskip\protect\includegraphics[height=3\baselineskip]{example-image-a}\par}
\lipsum[2]

\section{Section B}\label{sec:B}
\addstufftotoc{\nobreak\smallskip\protect\includegraphics[height=3\baselineskip]{example-image-b}\par}
\lipsum[2]

\section{Section C}\label{sec:C}
\addstufftotoc{\nobreak\smallskip\protect\hyperref[sec:C]{\includegraphics[height=3\baselineskip]{example-image-c}}\par}
\lipsum[2]
\end{document}

C 部分的尝试(尝试使用这个答案) 是抛出错误的地方:

! Use of \\addstufftotoc doesn't match its definition.

有没有办法修改的定义addstufftotoc或其他方法来产生我想要的结果(即,在TOC链接到文档中各个部分的图片)?

答案1

命令也\includegraphics必须受到保护\hyperref,就是这样。

使用

\addstufftotoc{\nobreak\smallskip\protect\hyperref[sec:C]{\protect\includegraphics[height=3\baselineskip]{example-image-c}}\par}

为了达成这个。

\documentclass{article}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage[colorlinks=false,linkcolor=black,bookmarks=false]{hyperref}
\newcommand{\addstufftotoc}[2][toc]{% \addimagetotoc[<toc>]{<stuff>}
  \addtocontents{#1}{#2}%
}
\begin{document}

\tableofcontents

Click to learn more:\\

\hyperref[sec:A]{\includegraphics[height=5\baselineskip]{example-image-a}}\qquad
\hyperref[sec:B]{\includegraphics[height=5\baselineskip]{example-image-b}}\qquad
\hyperref[sec:C]{\includegraphics[height=5\baselineskip]{example-image-c}}

\section{Section A}\label{sec:A}
\addstufftotoc{\nobreak\smallskip\protect\includegraphics[height=3\baselineskip]{example-image-a}\par}
\lipsum[2]

\section{Section B}\label{sec:B}
\addstufftotoc{\nobreak\smallskip\protect\includegraphics[height=3\baselineskip]{example-image-b}\par}
\lipsum[2]

\section{Section C}\label{sec:C}
\addstufftotoc{\nobreak\smallskip\protect\hyperref[sec:C]{\protect\includegraphics[height=3\baselineskip]{example-image-c}}\par}
\lipsum[2]
\end{document}

一些解释:

\includegraphics定义为

\def\includegraphics{%
  \@ifstar
    {\Gin@cliptrue\Gin@i}%
    {\Gin@clipfalse\Gin@i}}

即命令本身没有参数,但将其留给内部命令等,\Gin@i而这些命令本身具有可选参数——这是脆弱的,并且\hyperref{\includegraphics...}会崩溃,然后看不到完整的参数列表。为了防止这种情况,\protect必须使用。

另一种方法是使用包\robustify中的命令,并在文档的序言中etoolbox说明——这将使其变得健壮并且不再需要(对于)\robustiy{\includegraphics}\includegraphics\protect\includegraphics

相关内容