用边框格式化新环境

用边框格式化新环境

我为自己定义了一个新的环境,如下所示:

\newenvironment{myquote}{\list{}{\leftmargin=0.3in\rightmargin=0.3in}\item[]}{\endlist}

我在这里想要做的是通过添加边框来格式化它。所有边框都需要是实心的,但左边框需要更粗。

有什么办法呢?

答案1

这里有一个使用 mdframed 的解决方案。您有两个新键:addleftlinewidthaddleftlinecolor修改附加设置:

\documentclass{article}
\usepackage{showframe}
\usepackage[framemethod=default]{mdframed}
\makeatletter
\mdf@do@lengthoption{addleftlinewidth==\z@}
\newcommand*\mdf@addleftlinecolor{\mdf@linecolor}
\define@key{mdf}{addleftlinecolor}[\mdf@linecolor]{%
  \def\mdf@addleftlinecolor{#1}%
}
\mdfsetup{settings={\addtolength{\mdf@leftmargin@length}{\mdf@addleftlinewidth@length}}}

\preto\md@frame@leftline@single{%
           \llap{\color{\mdf@addleftlinecolor}%{\mdf@middlelinecolor}%
               \rule[-\dp\@tempboxa-\mdf@innerbottommargin@length%
                        \ifbool{mdf@bottomline}{-\mdf@middlelinewidth@length}{}]%
                    {\mdf@addleftlinewidth@length}{\mdfboundingboxheight%
                         +\ifbool{mdf@bottomline}{\mdf@middlelinewidth@length}{0pt}
                         +\ifbool{mdf@topline}{\mdf@middlelinewidth@length}{0pt}}%
                  \hspace*{\mdf@middlelinewidth@length}}% 
}%
\makeatother
\mdfdefinestyle{cssstyle}{linecolor=blue,linewidth=2pt,%
                          addleftlinewidth=6pt,addleftlinecolor=red,
                         skipbelow=\topskip,skipabove=\topskip}

\newmdenv[style=cssstyle]{myquote}

\usepackage{lipsum}

\begin{document}

\begin{myquote}[addleftlinewidth=6pt]
\lipsum[2]
\end{myquote}

Text

\begin{myquote}[addleftlinewidth=4pt,addleftlinecolor=yellow]
\lipsum[3]
\end{myquote}
\end{document}

在此处输入图片描述

目前仅支持单帧。

答案2

您可以使用adjustbox包装在其周围添加一个框架,然后剪掉框架的某些侧面以使其变薄。

我删除了引文,用居中的小页面代替,因为这样处理起来更简单adjustbox。但是,它不能跨页面拆分。

没有直接的 CSS 方式来定义框架或边框。一些键adjustbox允许 1、2 或 4 个参数,就像一些 CSS 设置一样(有关详细信息,请参阅手册),但仅此而已。在 LaTeX 中,您基本上总是必须将相关内容框起来,然后根据其大小在其周围绘制线条。如果您想要任何特殊的东西,例如仅在一侧(或更厚的一侧)使用框架,那么您也可以使用 TikZ 或 PSTricks 等绘图包来执行此操作。实际上,提到的mdframe包确实使用了其中之一。

\documentclass{article}

\usepackage{adjustbox}

\newenvironment{myquote}{%
    \par\smallskip\par\noindent
    \adjustbox{%
        minipage=\linewidth-0.6in, % to get your 2x0.3in border
        fbox=2pt, % 2pt frame all around
        Clip=0pt 1pt 1pt 1pt, % remove 1pt of the bottom, top and right frame
        center % center the whole thing (around \linewidth)
    }\bgroup
}{%
    \egroup
    \par\smallskip\par
}

\usepackage{lipsum}
\begin{document}

\lipsum[1]
\begin{myquote}
\lipsum[2]
\end{myquote}
\lipsum[3]

\end{document}

结果

答案3

如果你不需要分页符,那真的很简单:

\documentclass{article} 
\usepackage{array,xcolor,lipsum}
\newenvironment{myquote}
  {\par\medskip\noindent\hspace*{0.3in}
   \tabular{!{\color{blue!40}%
              \vrule width 5pt}p{\dimexpr\linewidth-0.6in-2\tabcolsep-5pt\relax}|}\hline}
  {\\\hline\endtabular\par\medskip}

\begin{document}
\lipsum[1]
\begin{myquote}
\lipsum[1]
foo bar baz
\end{myquote}
\lipsum[1]
\end{document}

在此处输入图片描述

答案4

mdframed如果您需要能够跨越页面边界,使用可能是最佳选择。除了加粗线条,您还可以使用tikz阴影来突出显示所需的边缘。在这里,我改编了高度灵活矩形的新命令。您不仅可以调整的值xshift来获得更厚的阴影,而且tikz可以根据需要自定义的全部功能:

在此处输入图片描述

\documentclass[border=5pt]{standalone}
\usepackage{calc}
\usepackage{xcolor}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{shadows}

\tikzstyle{shadedbox} = [
  text width=0.97\linewidth,
  draw=black,
  shade, top color=white, bottom color=white,
  drop shadow={
    top color=black,
    bottom color=black,
    shadow xshift=-1.5pt,% add shading on left
    shadow yshift=-0.5pt,% 0pt removes shading at bottom
  },
  rectangle,
]

\newcommand{\myquote}[2][]{%
  \noindent%
  \begin{tikzpicture}%
    \node [shadedbox, #1] (box) {#2};%
  \end{tikzpicture}%
}

\newcommand{\ShortLoremIpsum}{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam turpis turpis, rutrum vel facilisis nec, scelerisque ut nisi. 

Proin et elit sapien. Ut non ante tellus. Pellentesque et tempus metus. Phasellus sit amet est nisl, a varius elit. Nunc nunc magna, molestie sit amet fermentum a, facilisis at urna.
}%


\begin{document}

\myquote{\ShortLoremIpsum}

\myquote[bottom color=yellow!10]{\ShortLoremIpsum}

\myquote[rounded corners=5pt, line width=1.0pt, draw=blue]{\ShortLoremIpsum}

\myquote[text width=0.6\linewidth, top color=red!10, densely dotted]{\ShortLoremIpsum}
\end{document}

相关内容