带有 showlabels 包的 numcases 环境

带有 showlabels 包的 numcases 环境

我刚刚发现环境numcases,它升级了包装箱,允许对不同的包装箱进行编号。

我目前也在使用showlabels包,它将标签名称放在 PDF 上,就在 TeX 文件中放置它的位置。非常有用的功能,尤其是在编写较长的文档时,您希望从 PDF 中向上滚动一页来获取标签名称,而不是打开另一个 TeX 文件并搜索公式!

不幸的是,我无法让numcases环境与软件包一起正常工作showlabels。特别是,我无法给最后一个案例贴上标签,否则我会收到错误“不兼容的列表无法拆箱”。但是,没有这个showcases包,一切都会顺利进行。如果我不给最后一个案例贴标签,它也会顺利运行,但这当然不是最佳的,因为我需要给所有案例贴标签……

这是一个例子。注释/取消注释包含包的行showlabels以查看行为。

\documentclass{article}

\usepackage{showlabels}
\usepackage{cases}

\begin{document}

\begin{numcases}{}
a & b \label{a}\\
c & d \label{b}
\end{numcases}

\end{document}

有人知道解决这个问题的办法吗?我也可以找到一种方法来避免numcases(同时获得相同的结果)。

答案1

我不明白为什么cases环境的行应该单独编号。但是,你可以使用以下命令获得效果empheq

\documentclass{article}

\usepackage{empheq}
\usepackage{showlabels}

\begin{document}

\begin{empheq}[left=\empheqlbrace]{alignat=2}
&a\qquad & b \label{a}\\
&c\qquad & d \label{b}
\end{empheq}

\end{document}

在此处输入图片描述

答案2

一种可能性是使用showkeys而不是showlabels(几十年来我们一直保持着良性竞争:-)但如果你想坚持反对,你可以添加一些防御性编码,numcases以便额外的框不会破坏它:

在此处输入图片描述

\documentclass[a4paper]{article}

%\usepackage{showkeys}
\usepackage{showlabels}
\usepackage{cases}

\makeatletter
\renewenvironment{numcases}[1]%
{$$\numc@opts \setbox\z@\hbox
  {\advance\c@equation\@ne\def\@currentlabel{\p@equation\theequation}% local
  $\displaystyle {#1\null}\m@th$}%
 \numc@setsub 
 \setbox\tw@\vbox\bgroup
  \stepcounter{equation}\def\@currentlabel{\p@equation\theequation}% 
  \global\@eqnswtrue\m@th \everycr{}\tabskip\numc@left\let\\\@eqncr
  \halign to\dimen@ii \bgroup \kern\wd\z@ \kern14\p@ % assume width of brace
    \tabskip\z@skip \global\@eqcnt\@ne $\displaystyle{##}$\hfil 
   &\global\@eqcnt\tw@ \skip@10\p@ \advance\skip@\tw@\arraycolsep \hskip\skip@
    ##\unskip\hfil\tabskip\@centering% \unskip removes space if no explanations
   &\global\@eqcnt\thr@@\hbox to\z@\bgroup\hss##\egroup\tabskip\z@skip\cr
}{\@@eqncr \egroup % end \halign, which does not contain first column or brace
 \global\advance\c@equation\m@ne 
%Measure the natural width of the alignment
 \unskip\unpenalty\unskip\unpenalty \setbox\z@\lastbox % grab last line
%%%%% NEW TEST
\ifvbox\z@
\setbox\tw@\box\z@
\setbox\z@\lastbox
 \nointerlineskip \copy\z@ % then put it back
 \nointerlineskip \copy\tw@ % then put it back
\else
 \nointerlineskip \copy\z@ % then put it back
\fi
%%%%% END NEW
 \global\dimen@i\wd\z@ 
 \setbox\z@\hbox{\hskip-\numc@left\unhbox\z@}% Measure its natural width
 \ifdim \wd\z@<\dimen@i \global\dimen@i\wd\z@ \fi
\egroup% end \vbox (box\tw@, box\z@ is restored to LHS)
\hbox to\dimen@ii{\m@th % assemble the whole equation
  \hskip\numc@left 
  \hbox to\dimen@i{$\displaystyle \box\z@ % parameter #1
    \dimen@\ht\tw@ \advance\dimen@\dp\tw@ % get size of brace
    \left\{\vcenter to\dimen@{\vfil}\right.\n@space % make brace
    $\hfil}\hskip\@centering % finished first part (filled whole line)
  \kern-\dimen@ii % backspace the full width
  $\vcenter{\box\tw@}$% overlay the alignment
 }% end the \hbox to\dimen@ii
\numc@resetsub
$$\global\@ignoretrue}
\makeatother

\begin{document}

\begin{numcases}{}
a & b {\label{a}}\\
c & d {\label{b}}
\end{numcases}

\end{document}

相关内容