我刚刚发现环境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}