`\label` 对新环境中标题位置的影响

`\label` 对新环境中标题位置的影响

我用的是新环境并尝试使用\label-\ref命令来引用它。我遇到的问题是该\label命令会影响标题的垂直位置。

MWE 是:

\documentclass[a4paper]{memoir}
\usepackage{lipsum}

%%% caption for new environment
\makeatletter
\newcommand{\mycaption}[1]{%
 \strictpagecheck\marginpar{\setlength{\parindent}{1.0em}\small
  \@afterindentfalse\@afterheading {\textbf{Caption \themynewcount:}} #1}%
}
\makeatother

%%% new environment
\newcounter{mynewcount}[chapter]
\renewcommand{\themynewcount}{\thechapter.\arabic{mynewcount}}   

\newenvironment{mynewenv}[1]{%
 \refstepcounter{mynewcount}%
 \vspace{2\abovedisplayskip}%
 \mycaption{#1}%
 \vspace{-\abovedisplayskip} 
 \noindent\begin{minipage}[t]{\textwidth}%
 }{\end{minipage}\vspace{\belowdisplayskip}}

\begin{document}
\chapter{Chapter}
\lipsum[1]
\begin{mynewenv}{Caption}
\label{test} % <<< label
\lipsum[2]
\end{mynewenv}
\ref{test} % <<< refer to label
\end{document}

如果没有\label\ref命令,标题将与环境内容的顶部正确对齐:

在此处输入图片描述

然而,有了它们,标题就上移了:

在此处输入图片描述

我怎样才能解决这个问题?

答案1

警告:因为您的代码使用marginpar不能与迷你页面很好地对齐。

您可以更改mynewenv环境定义以在其中使用可选参数\label,如下所示:

\newenvironment{mynewenv}[2][]{% <-- here
 \refstepcounter{mynewcount}%
 \vspace{2\abovedisplayskip}%
 \mycaption{#2}\label{#1}%       <-- here
 \vspace{-\abovedisplayskip} 
 \noindent\begin{minipage}[t]{\textwidth}%
 }{\end{minipage}\vspace{\belowdisplayskip}}

然后,您只需传递labelas 选项,例如:

\begin{mynewenv}[test]{Caption}
\lipsum[2]
\end{mynewenv}
As we can see in \ref{test}...

或者不使用该选项(但在这种情况下,如果多次使用可能会出现一些警告):

\begin{mynewenv}{Caption}
\lipsum[2]
\end{mynewenv}

在此处输入图片描述

相关内容