mdframed:根据内容调整框架大小

mdframed:根据内容调整框架大小

考虑一下:

\documentclass{article}
\usepackage[framemethod=TikZ]{mdframed}

\begin{document}
\begin{mdframed}[innerrightmargin=0pt]
TEXT\end{mdframed}
\end{document}

这将产生一个比其内容宽得多的框架:

在此处输入图片描述

我知道这不是一个错误:mdframed文档中提到了一个userdefinedwidth默认为的参数\linewidth。但是我怎样才能获得mdframed与其内容宽度相同的框架呢?

(我实际上需要的是一个带有圆角和阴影选项的盒子;不需要分成多页。这mdframed似乎是获得盒子的最简单方法,但如果让它的大小与内容相符太麻烦,那么了解它会很有用,这样我就可以尝试纯粹的tikz。)

答案1

如何使用tikz node, 就像是

\newcommand{\myboxedtext}[2][rectangle,draw,fill=orange,rounded corners]{%
            \tikz[baseline=-0.6ex] \node [#1,rounded corners]{#2};}%

这有一个可选参数,可按照下面的 MWE 所示使用。

截屏

\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}

\newcommand{\myboxedtext}[2][rectangle,draw,fill=orange,rounded corners]{%
        \tikz[baseline=-0.6ex] \node [#1,rounded corners]{#2};}%

\begin{document}
\myboxedtext{boxed text here}
\lipsum[1]

\myboxedtext[fill=red,text=yellow]{boxed text here}
\lipsum[2]
\end{document}

答案2

这是一个使用的解决方案varwidthenviron 包。首先\BODY将环境的保存在\usebox使用varwidth环境中,然后测量其宽度以指定环境\userdefinewidthmdframed

在此处输入图片描述

笔记:

代码:

\documentclass{article}
\usepackage{xcolor}
\usepackage[framemethod=TikZ]{mdframed}
\usetikzlibrary{shadows}
\usepackage{environ}
\usepackage{varwidth}
\usepackage{showframe}

\newlength{\MyMdframedWidthTweak}%
\NewEnviron{MyMdframed}[1][]{%
    \setlength{\MyMdframedWidthTweak}{\dimexpr%
        +\mdflength{innerleftmargin}
        +\mdflength{innerrightmargin}
        +\mdflength{leftmargin}
        +\mdflength{rightmargin}
        }%
    \savebox0{%
        \begin{varwidth}{\dimexpr\linewidth-\MyMdframedWidthTweak\relax}%
            \BODY
        \end{varwidth}%
    }%
    \begin{mdframed}[
        backgroundcolor=lightgray, 
        shadow=true, 
        shadowsize=4pt,
        roundcorner=5pt,
        userdefinedwidth=\dimexpr\wd0+\MyMdframedWidthTweak\relax, 
        #1]
        \usebox0
    \end{mdframed}
}

\begin{document}
\begin{MyMdframed}[backgroundcolor=yellow!20]
    Sample
\end{MyMdframed}
\begin{MyMdframed}[backgroundcolor=green!20]
    Somewhat longer text.
\end{MyMdframed}
\begin{MyMdframed}[backgroundcolor=orange!20]
    Much longer text that takes up more than one line. 
    This should span across the entire width of the page and continue on to the next line.
\end{MyMdframed}
\end{document} 

答案3

一个例子tcolorbox失踪。

默认情况下,常规tcolorbox使用\linewidth框宽度,但包还提供了\tcbox根据其内容调整框大小的命令。几乎所有tcolorbox选项都可以应用于\tcbox

下面的这段代码展示了如何\mybox基于 声明命令\tcbox。它有一个强制选项,用于更改默认选项,还有一个可选参数,用于更改默认背景和框架颜色。

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{lipsum}

\newtcbox{\mybox}[2][red]{nobeforeafter,tcbox raise base, arc=0pt, outer arc=0pt, colback=#1!10!white, colframe=#1!50!black, boxsep=0pt,left=2pt,right=2pt,top=2pt,bottom=2pt,boxrule=1pt,#2}

\begin{document}

\mybox{}{Default box} \lipsum[4]

\mybox[green]{}{Default with different background}
\lipsum[4]

\mybox{colupper=red!30!black,boxrule=2pt}{Non default box}
\lipsum[4]
\end{document}

在此处输入图片描述

答案4

我认为 cmhughes 走在正确的轨道上,但我宁愿tikz做对齐基线的工作:

\newcommand{\myboxedtext}[2][rectangle,draw,fill=white,rounded corners]{%
            \tikz[baseline] \node [#1,rounded corners,anchor=text]{#2};}%

相关内容