标题问题是我需要的最后一条信息,以便以我的方式解决问题。在 mdenvironment 周围放置\sbox
or环境会产生一个lrbox
! Missing \endgroup inserted.
我不知道该如何解决。
(MWE 可在底部找到)
也许有一个完全不同的更好的方法,所以这里是完整的故事:
我正在开发几个环境,以便使用 beamer 类轻松创建幻灯片。目前,我想放置一个框(如果内容很重要,则为图像)相对于 mdframe 环境的位置和/或尺寸,作为一种标签。
图中说明了我想要创建的元素类型。最终,许多这样的元素将被分组为一个环境,该环境在编译时将元素相互排列,以使事物看起来美观。
我的问题是放置标签,即示例图像中的闪电。这非常困难,因为 \ldots
如果我把它放在 mdenvironment 之前,mdenvironment 就会覆盖它,这样就只能看到闪电的上半部分。
如果我把它放入 mdenvironment,我就找不到可靠的方法来计算如何将闪电移动到它应该在的位置。
如果我把它放在 mdenvironment 之后,我需要确定 mdenvironment 的高度和深度,以计算需要将标签向上移动多远
从我的角度来看,选项 1 的问题无法解决。总的来说,我想我花了 8 个小时尝试让选项 2 工作,但失败了。第三个选项似乎可行,但在mdenvironment 周围放置一个\sbox
或环境会产生lrbox
! Missing \endgroup inserted.
我无法解决。
这是一个几乎最小的工作示例:
\documentclass{article}
\usepackage[framemethod=pgf]{mdframed}
\newmdenv[%
innerlinewidth=2pt,%
roundcorner=10pt,%
linecolor=black,%
backgroundcolor=white,%
skipabove=.5\baselineskip,skipbelow=.5\baselineskip,%
innerleftmargin=5pt,innerrightmargin=5pt,innertopmargin=5pt,innerbottommargin=5pt%
]{mybox}
\begin{document}
\sbox0{%
\begin{mybox}
This is some text.
\end{mybox}
}
\end{document}
几乎是最小的,因为我留下了对 mdenvironment 的规范,因为我不知道它对于解决问题有多重要。
我(我想我)需要把它放进一个盒子里才能获得它的高度和深度,不是吗?
答案1
您需要将其包装在垂直盒子中,例如minipage
:
\documentclass{article}
\usepackage[framemethod=pgf]{mdframed}
\newmdenv[%
innerlinewidth=2pt,%
roundcorner=10pt,%
linecolor=black,%
backgroundcolor=white,%
skipabove=.5\baselineskip,skipbelow=.5\baselineskip,%
innerleftmargin=5pt,innerrightmargin=5pt,innertopmargin=5pt,innerbottommargin=5pt%
]{mybox}
\begin{document}
\begin{lrbox}{0}\begin{minipage}{\textwidth}
\begin{mybox}
This is some text.
\end{mybox}
\end{minipage}\end{lrbox}
\the\ht0,\the\dp0
\end{document}
答案2
正如 David 在他的回答中所评论的那样,你需要一个小页面。如果你切换到tcolorbox
,您可以使用密钥以更简单(更简短)的方式执行此操作,capture
该密钥允许您以多种方式捕获框,包括minipage
。 重现您的框的小例子:
\documentclass{article}
\usepackage[many]{tcolorbox}
\newtcolorbox{myboxi}[1][]{
breakable,
colback=white,
colframe=black,
arc=8pt,
boxrule=2pt,
left=5pt,
right=5pt,
top=5pt,
bottom=5pt,
boxsep=0pt,
minipage,
#1
}
\begin{document}
\sbox0{%
\begin{myboxi}
This is some text.
\end{myboxi}}
Width: \the\wd0,
height: \the\ht0,
depth: \the\dp0.
\end{document}
tcolorbox
beamer
还为您提供良好的功能,使其与皮肤顺利融合beamer
。