当 showkeys 加载时,如何防止类定理头部被覆盖?

当 showkeys 加载时,如何防止类定理头部被覆盖?

以下源导致类定理环境中的“EXERCSISES”头被里面枚举列表的第一项覆盖:

\documentclass{article}

\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{enumitem}

\declaretheoremstyle[
headfont=\bfseries,%
headpunct={\vspace{\topsep}\newline},
numbered=no,
spaceabove=3\topsep,
postheadspace=0 pt ]{exercs}

\declaretheorem[name=EXERCISES,style=exercs]{problems}

\newlist{problemsenum}{enumerate}{3}
\setlist[problemsenum,1]{%
    label=\arabic*.,
    before=\leavevmode \vspace{-\dimexpr\baselineskip+\topsep\relax}
}

\usepackage{showkeys} 

\begin{document}

\begin{problems}
\label{myproblems}

\begin{problemsenum}

\item Do this one first.
\item Solve this next.

\end{problemsenum}

\end{problems}

\end{document} 

头部被项目覆盖

注释掉\usepackage{showkeys} 或者省略\label可防止覆盖:

输出正常

有没有办法防止覆盖,即使showkeys加载还包括剧照\label吗?

防止覆盖的一种方法showkeys不是加载只是删除\begin{problems}\label命令之间的换行符:

\begin{problems}%
\label{my problems}

但是,即使进行了这样的更改,一旦showkeys加载,覆盖仍然会持续存在。因此,需要一个更强大的解决方法。

笔记:problemsenum为了能够使用 创建对环境中各个项目的交叉引用problemsenum,需要对环境进行看似复杂的定义\cref,即使类定理环境没有编号。(见如何使用 cleveref 获取类似定理的名称和列表项编号?如何在类似定理的环境中改变头部后的垂直空间

答案1

像 这样的软件包showkeys在相当深的层次上工作,并对某些事物(如定理标签)的产生方式做出一些假设。在这种情况下,您滥用 来headpunct插入 会\vspace造成混淆showkeys

原来,现场的竞争对手就是针对这种特殊情况而工作的:

\usepackage{showlabels}

这个包比 更可定制showkeys,所以我的建议是换一个。但是,不能保证其他像您在这里做的那些复杂的事情也能奏效。无论如何, 和showkeys都只showlabels在编写文档时使用,这时一些糟糕的排版可以忽略不计。

相关内容