能showlabels
标签showlabels: 在 marginpar 中包装标签但是@DavidCarlisle的解决方案并不能解决更普遍的情况。考虑以下MWE:
\documentclass{article}
\begin{document}
\begin{figure}[ht]
\centering
\rule{1cm}{1cm}
\caption{default}
\label{fig:a very very very long and detailed label}
\end{figure}
\end{document}
添加包时showkeys
输出为:
该showlabels
包也出现了类似的问题(无论是否使用了@DavidCarlisle 的 hack):
那么,有办法解决这个问题吗?
答案1
为了分割没有空格的长标签,您可以\seqsplit
使用seqsplit 包。以下内容改编自大卫的回答并展示了包装长标签的必要性:
\documentclass{article}
\usepackage[%showframe, % show helper lines
paperwidth=10cm, paperheight=7cm,
hmargin=24mm,vmargin=4mm, marginparwidth=17mm,
]{geometry}
\usepackage{seqsplit}
\usepackage{showkeys}
\usepackage{xstring}
\renewcommand*\showkeyslabelformat[1]{%
\noexpandarg%
% instead of \textvisiblespace you can also put in ~
% if you want to keep a plain space at space characters
\StrSubstitute{\(\{\)#1\(\}\)}{ }{\textvisiblespace}[\TEMP]%
\parbox[t]{\marginparwidth}{\raggedright\normalfont\small\ttfamily\expandafter\seqsplit\expandafter{\TEMP}}}
\begin{document}
\begin{equation}
(a\cdot b ) \cdot c = a\cdot (b\cdot c)
\label{eq:groupassociativity}
\end{equation}
\begin{figure}[ht]
\centering
\rule{1cm}{1cm}
\caption{default}
\label{fig:a very very very long and detailed label}
\end{figure}
\end{document}
对于空间,需要替换 seqsplit 中的空格,要么是~
为了保留空间,要么是为了\textvisiblespace
更好地形象化。
答案2
拥有这样的标签实际上是对标签系统的滥用,标签旨在成为简短的符号名称,但无论如何
\documentclass{article}
\usepackage{showkeys}
\renewcommand*\showkeyslabelformat[1]{%
\fbox{\parbox[t]{\marginparwidth}{\raggedright\normalfont\small\ttfamily#1}}}
\begin{document}
\begin{figure}[ht]
\centering
\rule{1cm}{1cm}
\caption{default}
\label{fig:a very very very long and detailed label}
\end{figure}
\end{document}