可打破垂直规则,如 tcolorbox,无需 TikZ

可打破垂直规则,如 tcolorbox,无需 TikZ

我正在寻找一种方法,让段落左侧有双垂直线。这可以通过framed包来实现,但我不喜欢它的间距(见图)。目的是tcolorbox产生,但我不喜欢使用 TikZ,因为它会减慢编译速度(我会经常使用规则。)

我看见 这个问题,它询问了如何在 Plain TeX 中生成可拆分的垂直线,但间距就像 一样framed。我也尝试了mdframed包(没有 TikZ),但它产生了像 这样的框framed,并且不支持双线(没有 TikZ 或 PSTricks。)

那么如果没有 TikZ 该怎么办?

谢谢

输出

framed 与 tcolorbox 这些行是通过获得的页框showframe

不同之处(添加)

  • “With framed” 顶部框架之间有空格,底部框架之间没有空格。
  • 'With tcolorbox' 的顶部之间没有空格,底部之间有空格。换句话说,行的结束位置恰好是内容结束的位置。

代码

\documentclass{article}

\usepackage{framed}

\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{xparse,skins,breakable}

\usepackage{lipsum}
\usepackage{showframe}

\newenvironment{leftvert}{%
    \def\FrameCommand{%
        \kern 1.75pt \vrule width 1.9pt \kern .7pt \vrule width 1.9pt\hspace{\dimexpr 2em-6.25pt}%
    } \MakeFramed {\advance\hsize-\width \FrameRestore}%
}{\endMakeFramed}

\newtcolorbox{tleftvert}{%
    parbox=false,
    breakable,
    blanker,
    left=2em,
    borderline west={2pt}{3pt}{double},
}

\begin{document}
    \begin{leftvert}
        \lipsum[1-10]
    \end{leftvert}
    \begin{tleftvert}
        \par
        \lipsum[1-10]
    \end{tleftvert}
\end{document}

另一个例子(添加)

javi_gg1写道:

在我看来,在这两种情况下,规则的开始和结束位置都与文本的开始和结束位置完全相同。区别在于,使用 时tcolorbox,文本和规则都与页面框架的顶部对齐,而使用 时,framed两者都与页面框架的底部对齐。

我再举一个例子来说明不对

编辑:我把这个例子放在这里,这样我们就能很容易地看到错误的底部间距。所以,我仍然有错误的间距和没有数学的文本。

framed 与 tcolorbox

\begin{document}
    \begin{leftvert}
        \lipsum[1-3]
        \newpage
        \begin{equation}
            \begin{split}
                some &= long\\ &= long\\ &= long\\ &= long\\ &= long\\ &= long\\
                     &= long\\ &= long\\ &= long\\ &= long\\ &= long\\ &= long\\
                     &= equation.
            \end{split}
        \end{equation}
    \end{leftvert}
    \newpage
    \begin{tleftvert}
        \par
        \lipsum[1-3]
        \begin{equation}
            \begin{split}
                some &= long\\ &= long\\ &= long\\ &= long\\ &= long\\ &= long\\
                     &= long\\ &= long\\ &= long\\ &= long\\ &= long\\ &= long\\
                     &= equation.
            \end{split}
        \end{equation}
    \end{tleftvert}
\end{document}

答案1

在我看来,在这两种情况下,规则的开始和结束位置都与文本的开始和结束位置完全相同。区别在于,使用 时tcolorbox,文本和规则都与页面框架的顶部对齐,而使用 时,framed两者都与页面框架的底部对齐。

使用framed环境时,可以通过调整 的值来设置第一行文本的基线与页面顶部之间的距离\FrameHeightAdjust。将其设置为略小于1em应该可以实现您想要的效果(使用 完全匹配1em会使其填满页面并在开头创建一个空白页):

\renewcommand{\FrameHeightAdjust}{\dimexpr 1em-0.1pt}

框架

\documentclass{article}

\usepackage{framed}

\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{xparse,skins,breakable}

\usepackage{lipsum}
\usepackage{showframe}

\newenvironment{leftvert}{%
    \renewcommand{\FrameHeightAdjust}{\dimexpr 1em-0.1pt}
    \def\FrameCommand{%
        \kern 1.75pt \vrule width 1.9pt \kern .7pt \vrule width 1.9pt\hspace{\dimexpr 2em-6.25pt}%
    } \MakeFramed {\advance\hsize-\width \FrameRestore}%
}{\endMakeFramed}

\newtcolorbox{tleftvert}{%
    parbox=false,
    breakable,
    blanker,
    left=2em,
    borderline west={2pt}{3pt}{double},
}

\begin{document}
    \begin{leftvert}
        \lipsum[1-10]
    \end{leftvert}
    \begin{tleftvert}
        \par
        \lipsum[1-10]
    \end{tleftvert}
\end{document}

编辑:如果您\newpageframed环境内使用命令,规则将延伸到页面底部。为了防止这种情况,您可以关闭环境framed,发出\newpage命令,然后framed再次打开环境:

...
\end{leftvert}
\newpage
\begin{leftvert}
...

至于方程式,它们本身在上方和下方有一些填充,这会使规则延长。如果你碰巧在环境末尾有一个方程式,framed并且你希望规则在方程式结束的地方结束,你可以本地设置:\belowdisplayskip0pt

{
\setlength{\belowdisplayskip}{0pt}
    \begin{equation}
    ....
    \end{equation}
}

请注意,括号中的更改是局部的:您仍然希望在其他等式中添加填充。

框架新页 框架方程

\documentclass{article}

\usepackage{amsmath}

\usepackage{framed}

\usepackage{tikz}
\usepackage{tcolorbox}
\tcbuselibrary{xparse,skins,breakable}

\usepackage{lipsum}
\usepackage{showframe}

\renewcommand{\FrameHeightAdjust}{\dimexpr 1em-0.1pt}
\newenvironment{leftvert}{%
    \def\FrameCommand{%
        \kern 1.75pt \vrule width 1.9pt depth 0pt \kern .7pt \vrule width 1.9pt depth 0pt\hspace{\dimexpr 2em-6.25pt}%
    } \MakeFramed {\advance\hsize-\width \FrameRestore}%
}{\endMakeFramed}

\newtcolorbox{tleftvert}{%
    parbox=false,
    breakable,
    blanker,
    left=2em,
    borderline west={2pt}{3pt}{double},
}

\begin{document}
    \begin{leftvert}
        \lipsum[1-3]
    \end{leftvert}
    \newpage
    \begin{leftvert}
        {
        \setlength{\belowdisplayskip}{0pt}
        \begin{equation}
        \begin{split}
        some &= long\\ &= long\\ &= long\\ &= long\\ &= long\\ &= long\\
        &= long\\ &= long\\ &= long\\ &= long\\ &= long\\ &= long\\
        &= equation.
        \end{split}
        \end{equation}
    }
    \end{leftvert}
    \newpage
    \begin{tleftvert}
        \par
        \lipsum[1-3]
        \begin{equation}
        \begin{split}
        some &= long\\ &= long\\ &= long\\ &= long\\ &= long\\ &= long\\
        &= long\\ &= long\\ &= long\\ &= long\\ &= long\\ &= long\\
        &= equation.
        \end{split}
        \end{equation}
    \end{tleftvert}
\end{document}

相关内容