![使用 mdframed 包的多个左边距条](https://linux22.com/image/268992/%E4%BD%BF%E7%94%A8%20mdframed%20%E5%8C%85%E7%9A%84%E5%A4%9A%E4%B8%AA%E5%B7%A6%E8%BE%B9%E8%B7%9D%E6%9D%A1.png)
如何使用mdframed
包获取多个左边距条?我可以使用例如获取单个左边距条
\documentclass{article}
\usepackage{mdframed}
\begin{document}
\begin{mdframed}[linewidth=1,topline=false,rightline=false,bottomline=false]
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed orci quis urna volutpat tincidunt. Praesent ultrices commodo auctor. Nunc vel nulla sed arcu aliquet faucibus quis nec ante. Nam elementum neque vitae sem fringilla a euismod eros malesuada. Duis orci eros, tincidunt et venenatis at, tristique in tortor
\end{mdframed}
\end{document}
带输出
这个问题的目的是用 LaTeX 格式化电子邮件通信。因此,如果一封电子邮件引用了之前的电子邮件,而之前的电子邮件又引用了之前的电子邮件,则需要两个左栏。为了实现这一点,可以尝试嵌套环境mdframed
以获得类似
后者的问题是,mdframed
环境不允许嵌套环境分页。这意味着如果引用的文本超过一页,它就会崩溃。如果环境不是嵌套的,它允许分页。
更具体地说,对于一般情况,我希望有一个环境,比如myframe
采用一个整数参数来指定要使用的左栏数量。例如,我可以这样写
\documentclass{article}
\usepackage{mdframed,lipsum}
\begin{document}
\def\numbars{3}
\begin{myframe}{\numbars}
\lipsum[1-10]
\end{myframe}
\end{document}
答案1
以下解决方案可以作为起点。
让我从一些新钥匙开始。
该示例定义了一些新的键mdframed
:
quotelinewidth
-- 设置报价线的线宽quoteleveldistance
-- 如果使用超过 1 级引号,则设置引号行之间的距离quotelevel
-- 设置引用级别
一致tikzstyle
quoteline
被定义,指定 的样式。默认使用quoteline
键的颜色。middlelinecolor
下面是分页符正常工作的示例。
\documentclass{article}
%\usepackage{showframe}
\usepackage[framemethod=tikz]{mdframed}%load xparse
\makeatletter
\mdf@dolist{\mdf@do@lengthoption}{%
{quotelinewidth==1pt},%
{quoteleveldistance==5pt},%
}
\newcounter{quotelevel}
\define@key{mdf}{quotelevel}[1]{%
\setcounter{quotelevel}{#1}%
}%
\tikzset{quoteline/.style={}}%
\tikzset{quoteline/.append style={%
draw=\mdf@middlelinecolor,%
line width=\mdf@quotelinewidth@length%
}}%
\newcommand\computequotelines{%
\wlog{MDF-INFO: quotelevel \the\value{quotelevel}}%
\ifcase\value{quotelevel}%level 0
\mdfsetup{hidealllines=true}%
\or%level 1
\wlog{quotelinewidth=\the\mdf@quotelinewidth@length and quoteleveldistance=\the\mdf@quoteleveldistance@length}%
\setlength{\mdf@middlelinewidth@length}{\mdf@quotelinewidth@length}%
\mdfsetup{innerleftmargin=\mdf@quoteleveldistance@length}%
\else%more than 1 level
\wlog{quotelinewidth=\the\mdf@quotelinewidth@length and quoteleveldistance=\the\mdf@quoteleveldistance@length}%
\setlength{\mdf@middlelinewidth@length}{%
\dimexpr \value{quotelevel}\mdf@quotelinewidth@length
+ \numexpr\value{quotelevel}-1\relax\mdf@quoteleveldistance@length
}%
\mdfsetup{innerleftmargin=\mdf@quoteleveldistance@length}%
\fi
\renewrobustcmd*\mdf@tikzbox@otl[2]{%one or two borders
\clip(0,0)rectangle(\mdfboundingboxwidth,\mdfboundingboxheight);%
\foreach \x in {1,...,\value{quotelevel}} {%
\path[transform canvas={%
xshift= (\x-1)*\mdf@quoteleveldistance@length
-0.5\mdf@middlelinewidth@length
+0.5\mdf@quotelinewidth@length,},
quoteline,mdfcorners,]##1;%
}
}%
}
\makeatother
\mdfdefinestyle{quotestyle}{%
middlelinecolor=blue,quotelinewidth=2pt,
hidealllines=true,leftline=true,%only leftline
skipabove=11pt,skipbelow=11pt,
innerleftmargin=0pt,innerrightmargin=0pt,
settings=\computequotelines,}
\newmdenv[style=quotestyle]{myframe}
\usepackage{lipsum}
\begin{document}
\begin{myframe}[quotelevel=1]
\lipsum[3]
\end{myframe}
\begin{myframe}[quotelevel=2]
\lipsum[2]
\end{myframe}
\begin{myframe}[quotelevel=3]
\lipsum[1]
\end{myframe}
\end{document}