通过下面的代码,我几乎得到了我想要的东西(包括方程式的文本旁边的感叹号),但是虽然我尊重文本宽度,但我收到了过满的 \hbox 消息。
第二个问题是方程编号不对齐。
也许小型页面不是合适的工具?
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\newenvironment{myenv}{\par\medskip \begin{minipage}[c]{0.05\textwidth}{\huge !}\end{minipage}\begin{minipage}[c]{0.95\textwidth}}{\end{minipage}\par\medskip}
This is a text.
\begin{myenv}
\blindtext
\begin{equation}
a=b\;.
\end{equation}
\end{myenv}
This a another equation:
\begin{equation}
c=d\;.
\end{equation}
\end{document}
答案1
正如 David Carlisle 指出的那样,您的过度填充\hbox
是由于minipage
您的环境创建的第一个开始了一个新段落。\parindent
除非您调用 ,否则 TeX 会自动在段落开头插入一个宽度为 的段落缩进框\noindent
。在这里,您可以在定义中将放在\noindent
第一个 之前。或者,如果您想摆脱段落缩进,您可以在文档中设置为;但要全局执行此操作而不是在环境中执行此操作——这会造成混淆。您也可以考虑使用\begin{minipage}
\parindent
0pt
parskip 包以此目的。
如果您应用这些建议之一并删除段落缩进(使用 局部删除\noindent
或使用 全局删除\parindent
),您提到的有关方程式对齐的问题仍然存在。这是完全可以预料到的,因为显示公式默认以行宽为中心。在您的环境中,行比在主文本中更靠右,但在这两种情况下,一旦您删除了段落缩进,行就会在完全相同的右边距结束(这是因为 0.05 + 0.95 = 1)。在这些条件下,显示公式居中的不可见垂直线0.025\textwidth
在您的环境中必然比在主文本中更靠右(恰好是 )。
我建议使用伟大的tcolorbox 包进行您想要的格式化。我将介绍两种定义合适warning
环境的方法,每种方法都有适用的选项。第一种方法减少了环境内的线宽,因此存在我们已经解释过的显示公式对齐的“问题”。第二种方法在环境内和正文中使用相同的线宽,因此不存在这个问题(或功能 :-)。为了做到这一点,它将装饰线和感叹号放在左边距。
第一种方式:减小线宽
\documentclass{article}
\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{skins, breakable}
\usepackage{lipsum} % only for demo code
\definecolor{warningBoxColor}{rgb}{0.4,0.5,0.8}
\newtcolorbox{warning}[1][]{
blanker, left=1.5cm, right=0mm,
borderline west={0.7mm}{1.1cm}{warningBoxColor}, breakable,
overlay unbroken and first={
\begin{tcbclipframe}
\coordinate (X) at ([xshift=5mm, yshift=-3mm]frame.north west);
\node[circle, inner sep=1mm, color=white, fill=warningBoxColor,
font=\bfseries] at (X) {!};
\end{tcbclipframe}
}, #1
}
\begin{document}
\lipsum[1][1-4]
\begin{warning}
\lipsum[1][5-12]
\begin{equation}
a = b
\end{equation}
\end{warning}
This is a another equation:
\begin{equation}
c = d
\end{equation}
\begin{warning}
\lipsum[1-6]
\begin{equation}
e = f
\end{equation}
\end{warning}
\end{document}
第二种方式:与正文相同的线宽
\documentclass{article}
\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{skins, breakable}
\usepackage{lipsum} % only for demo code
\definecolor{warningBoxColor}{rgb}{0.4,0.5,0.8}
\newtcolorbox{warning}[1][]{
blanker, borderline west={0.7mm}{-5mm}{warningBoxColor}, breakable,
before skip=2ex plus 0.1ex, after skip=2ex plus 0.1ex,
overlay unbroken and first={
\coordinate (X) at ([xshift=-10mm, yshift=-3mm]frame.north west);
\node[circle, inner sep=1mm, color=white, fill=warningBoxColor,
font=\bfseries] at (X) {!};
}, #1
}
\begin{document}
\lipsum[1][1-4]
\begin{warning}
\lipsum[1][5-12]
\begin{equation}
a = b
\end{equation}
\end{warning}
This is a another equation:
\begin{equation}
c = d
\end{equation}
\begin{warning}
\lipsum[1-6]
\begin{equation}
e = f
\end{equation}
\end{warning}
\end{document}
正如您所见,这样所有的方程式都围绕同一条不可见的垂直线排列。
定制
感叹号垂直居中
您可能想要自定义的第一件事是感叹号的位置。使用yshift=-0.5*\tcbtextheight
而不是yshift=-3mm
,\coordinate (X) at (...)
您可以将其相对于框内内容垂直居中:
该屏幕截图是通过将更改应用于第二个示例获得的。
盒子前后的垂直空间
如果你仔细比较“第一种方式”和“第二种方式”,你还会注意到,后者在警告框前后的垂直空间比前者要多一点。这是因为我在第二个例子中使用了before skip=2ex plus 0.1ex
,after skip=2ex plus 0.1ex
但在第一个例子中没有使用。
传递任意tcolorbox
选项
最后,warning
我定义的环境(在两个例子中)接受一个可选参数,您可以使用它来传递tcolorbox
您可能需要的任何选项“有时,但并非总是” - 否则,您当然会将它们放在环境定义中。
例如,您可以使用/tcb/show bounding box
第一个示例中的键来直观地看到由创建的框所占据的精确空间tcolorbox
:
\lipsum[1][1-4]
\begin{warning}[show bounding box]
\lipsum[1][5-12]
\begin{equation}
a = b
\end{equation}
\end{warning}
此特定选项(/tcb/show bounding box
)对于调试很有用;您可以找到还有很多其他选择在里面tcolorbox 手册。