但是,我希望能够从中的图片实际链接到文档中的部分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