调整 showlabels/showkeys - 包装标签

调整 showlabels/showkeys - 包装标签

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}

相关内容