第一种方式:减小线宽

第一种方式:减小线宽

通过下面的代码,我几乎得到了我想要的东西(包括方程式的文本旁边的感叹号),但是虽然我尊重文本宽度,但我收到了过满的 \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}\parindent0ptparskip 包以此目的。

如果您应用这些建议之一并删除段落缩进(使用 局部删除\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.1exafter 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 手册

相关内容