我想直观地标记我的标签。尝试使用扩展hyperref
的宏会给我错误消息和一些奇怪的行为。\label
\label@hook
梅威瑟:
\documentclass{scrbook}
\usepackage{blindtext}
\usepackage{etoolbox}
\usepackage{tikz}
\usepackage{hyperref}
\parindent=0pt
\makeatletter
\newcommand{\labmarred}{\@bsphack\tikz[remember picture,overlay] \fill[red] (0,0.75ex) circle (4pt);\@esphack}
\renewcommand{\labmarred}{\tikz[remember picture,overlay] \fill[red] (0,0.75ex) circle (4pt);}
\AtBeginDocument{\preto{\label@hook}{\labmarred}}
\makeatother
\begin{document}
\chapter{Chap 1}\label{chap:a}
\blindtext
\section{Sec 1}\label{sec:a}
\blindtext
\phantomsection\label{sec:a:a}
\blindtext
\labmarred
\blindtext
\subsection{Subsec 1}\label{subsec:a}
\blindtext
\subsection{Subsec 2}\label{subsec:b}
\blindtext
\subsection{Subsec 3}\label{subsec:c}
\blindtext
\end{document}
除了手动插入的红点(通过调用 插入的第 27 行\labmarred
)外,每个红点上的第一个 texxt 行都有虚假缩进,并且出现了几条错误消息,类型如下Bad space factor (0).
上述示例中的两个版本的结果完全相同,并且都使用环境tikz
而不是\tikz
结果。
所使用的包和版本通常showlabels
不在正确的位置。showkeys
\marginpar
有提示去哪儿吗?
答案1
感谢 @Ulrike Fischer 的评论,它\tikz
嵌入在 hbox 中,我找到了tikzmark
提供的 -library \pgfmark
,它与 相同,\tikzmark
但没有\hbox
。以下代码在某些限制下工作:从我的角度来看,使用没有任何问题,\label@hook
因为标签名称可用,据我所知,钩子系统钩子就是为此设计的。
\documentclass{scrbook}
\usepackage{blindtext}
\usepackage{etoolbox}
\usepackage{tikz}
\usetikzlibrary{tikzmark,calc}
\usepackage{hyperref}
\parindent=0pt
\parskip=1ex
\makeatletter
\newcounter{markcnt}
\newcommand{\labmarred}{\global\addtocounter{markcnt}{1}%
\pgfmark{dummy\arabic{markcnt}}\marginpar{\tikz[remember picture,overlay] \fill[red] ($(pic cs:dummy\arabic{markcnt})-(0,3ex)$) circle (4pt);}}
%\AtBeginDocument{\pretocmd{\label}{\labmarred}{}{}}
\AtBeginDocument{\preto{\label@hook}{\labmarred}{}{}}
\makeatother
\begin{document}
\chapter{Chap 1}\label{chap:a}
\blindtext
\section{Sec 1}\label{sec:a}
\blindtext
\phantomsection\label{sec:a:a}
\blindtext
\labmarred
\blindtext
\subsection{Subsec 1}\label{subsec:a}
\blindtext
\subsection{Subsec 2}\label{subsec:b}
\blindtext
\subsection{Subsec 3}\label{subsec:c}
\blindtext
\end{document}
问题:
y 轴偏移了约 ,
+3ex
我找不到原因,所以\tikz
必须将圆向下移动至大致正确的位置。由于圆圈是在中绘制的,因此
\marginpar
如果将圆圈移动到下一页,仍会出现问题\marginpar
- 最好将其放在页脚或页首。
无论如何 - 我提供这个作为答案,因为它似乎是一种可能的解决方法......
感谢@Christian Hupfer 的批评意见和@Ulrike Fischer 提供的(隐藏的)提示...
编辑:
由于 TeX 的分页符系统绝对无法访问,如果在\label
跨越多页的段落末尾放置一个,即使是这种粗略的解决方案也会失败……简而言之:无法按预期工作……