我正在尝试使用数据包hypcap
选项caption
或hypcap
数据包本身。如果我\caption{...}
在浮点数中使用,一切都会正常工作,并且我的图表列表中的超链接会跳转到顶部而不是图表的标题。但我正在使用自定义命令\mycaption{...}
来增强图表列表的更多细节。使用此命令,hypcap
包无法找到\caption{...}
后面的命令\capstart
,因为只有我自定义的命令。我怎样才能知道hypcap
或caption
搜索我的命令,或者我需要在我的定义中添加什么\mycaption{...}
才能hypcap
检测到它?
梅威瑟:
\documentclass{scrreprt}
\makeatletter
\newcommand{\myrawcaption}[2]{%
\def\n{\hfill\break}
\refstepcounter{figure}%
\addcontentsline{lof}{figure}%
{\protect\numberline{\thefigure}{\ignorespaces #1}}%
\addtocontents{lof}{\protect\nopagebreak[4]}
\addtocontents{lof}{\begingroup\leftskip3.8em #2\par\endgroup}
\begingroup
\def\n{\break}
\@makecaption{\csname fnum@figure\endcsname}{\ignorespaces #1}\par
\endgroup
}
\makeatother
\newcommand{\myfirstcaption}[1]{\myrawcaption{#1}
{Source:~My lovely source\protect\\*
License:~The fancy license}}
\usepackage{lipsum}
\setlipsumdefault{3}
\usepackage{hyperref}
\usepackage[figure]{hypcap}
\usepackage{scrhack}
\begin{document}
\chapter{chapter}
\lipsum
\begin{figure}[htbp]
\vspace{5cm}
\myfirstcaption{this is a caption}\label{label1}
\end{figure}
\lipsum
\listoffigures
\end{document}
错误
! 软件包 hypcap 错误:您忘记使用 \caption。
答案1
您可以\caption
在定义中使用\myrawcaption
:
\documentclass{scrreprt}
\makeatletter
\newcommand{\myrawcaption}[2]{%
\caption[#1]{#1}%
\addtocontents{\@nameuse{ext@\@captype}}{\protect\nopagebreak}%
\addtocontents{\@nameuse{ext@\@captype}}{\protect\begingroup
\protect\leftskip 3.8em
#2\protect\par
\protect\endgroup
}%
}%
\makeatother
\newcommand{\myfirstcaption}[1]{\myrawcaption{#1}
{Source:~My lovely source\protect\\*
License:~The fancy license}}
\usepackage{lipsum}
\setlipsumdefault{3}
\usepackage{hyperref}
\usepackage[figure]{hypcap}
\usepackage{scrhack}
\begin{document}
\listoffigures
\chapter{chapter}
\lipsum
\begin{figure}[htbp]
\vspace{5cm}
\myfirstcaption{this is a caption}\label{label1}
\end{figure}
\lipsum
\listoffigures
\end{document}
如果你需要改变定义\n
,我会使用
\BeforeStartingTOC[lof]{\renewcommand*{\n\break}}
\protect\n
并在标题文本中使用,将未扩展的内容添加到文件\n
中lof
。
\addtocontents
我还建议不要使用,而是定义一个新的条目类型,并将 分别与此条目类型一起figureinfo
使用。您可以使用来定义新的条目类型。\addcontentsline
tocbasic
\addxcontentsline
\DeclareTOCStyleEntry
\documentclass{scrreprt}
\makeatletter
\newcommand{\myrawcaption}[2]{%
\caption[#1]{#1}%
\addxcontentsline{\@nameuse{ext@\@captype}}{figureinfo}{#2}%
}%
\makeatother
\DeclareTOCStyleEntry{tocline}{figure}
\DeclareTOCStyleEntry[%
level=1,% same a (default of) figure
numwidth=0pt,% no number no width
indent=3.8em,% numwidth + indent of figure
onstartsamelevel=\nopagebreak,%
pagenumberbox=\csname @gobble\endcsname,%
linefill=\hfill
]{tocline}{figureinfo}
\newcommand{\myfirstcaption}[1]{\myrawcaption{#1}
{Source:~My lovely source\protect\\*
License:~The fancy license}}
\usepackage{lipsum}
\setlipsumdefault{3}
\usepackage{hyperref}
\usepackage[figure]{hypcap}
\usepackage{scrhack}
\begin{document}
\listoffigures
\chapter{chapter}
\lipsum
\begin{figure}[htbp]
\vspace{5cm}
\makeatletter
\@whilenum\value{figure}<20\do{% only for demonstrating page break in LoF
\myfirstcaption{this is a caption}\label{label\thefigure}
}
\makeatother
\end{figure}
\lipsum
\listoffigures
\end{document}
注意:此解决方案也适用于标准类(和其他几个类),但在这种情况下,您需要tocbasic
先加载包\DeclareTOCStyleEntry
。