考虑一下:
\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
这是一个使用的解决方案varwidth
和environ
包。首先\BODY
将环境的保存在\usebox
使用varwidth
环境中,然后测量其宽度以指定环境\userdefinewidth
的mdframed
:
笔记:
- 包裹
showframe
仅用于显示页边距。实际使用中不需要它。
代码:
\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};}%