我用的是新环境并尝试使用\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}}
然后,您只需传递label
as 选项,例如:
\begin{mynewenv}[test]{Caption}
\lipsum[2]
\end{mynewenv}
As we can see in \ref{test}...
或者不使用该选项(但在这种情况下,如果多次使用可能会出现一些警告):
\begin{mynewenv}{Caption}
\lipsum[2]
\end{mynewenv}