我怎样才能排版如下的框架:
?
我一直使用mdframed
或tcolorbox
排版框架,但我找不到此类功能的提及。
有没有一种简单的方法可以用上述包之一实现这种效果?如果没有,我们可以tcolorbox
通过 tikz 获得带有 皮肤的输出吗?如果没有,我们还能如何获得该框?
答案1
评论
该解决方案的使用tcolorbox
深受tcolorbox
第 45 页文档中的“FancyTitle”示例的启发。
执行
\documentclass{article}
\pagestyle{empty}
\usepackage{tcolorbox,lipsum}
% Inspired by FancyTitle in the tcolorbox-doc page 45
\tcbuselibrary{skins}
\newtcolorbox{mycolorbox}[2][]{%
enhanced,
colback=white,colframe=black,
arc=0pt,outer arc=0pt,
enlarge top by=\baselineskip/2+1mm,
overlay unbroken and first={%
\node[
rectangle,fill=white,
inner sep=1mm,anchor=west
] at ([xshift=4.5mm]frame.north west) {\strut\textbf{#2}};
},
#1%
}
\begin{document}
\lipsum[1]
\begin{mycolorbox}{Variables}
\[ \frac{}{x_1 : A_1,\ldots,x_n : A_n \vdash x_i : A_i} i \in \{ 1,\ldots,n \} \]
\end{mycolorbox}
\lipsum[1]
\end{document}
输出
答案2
你可以使用蒂克兹对于任务:
代码
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{lipsum}
\newcommand{\mybox}[3][black]% [options] title, content
{ \par
\begin{tikzpicture}
\node[draw,minimum width=\textwidth,inner sep=5mm,align=center,#1] (tempnode) {#3};
\node[right,#1,fill=white] at ($(tempnode.north)!0.9!(tempnode.north west)$) {#2};
\end{tikzpicture}
\par
}
\begin{document}
\lipsum[1]
\mybox{Test 1}{$\int\limits_{e}^{\pi}\log_2 x\ dx$}
\lipsum[2]
\mybox[very thick,red]{Test 2}{$\int\limits_{e}^{\pi}\log_2 x\ dx$}
\lipsum[3]
\mybox[line width=1mm,densely dashed,cyan!50!lime,text=black]{Test 3}{$\int\limits_{e}^{\pi}\log_2 x\ dx$}
\lipsum[4]
\end{document}
输出
编辑1:
由于太宽的框会引起overfull hbox
警告,因此我使用\rlap
了数学工具包将其宽度减小到零。对于细框架来说,这可能没问题,但非常粗的框架可能会挤入边距。此外,现在您可以分别影响文本和标题(因此如果您愿意,可以尽情发挥):
代码
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{mathtools}
\usepackage{lipsum}
\newcommand{\mybox}[4]% title, content, options, title options
{ \par
\vspace{3mm}
\rlap{%
\begin{tikzpicture}
\node[draw,minimum width=\textwidth,inner sep=5mm,align=center,outer sep=0pt,#3] (tempnode) {#2};
\node[fill=white,right,#4] at ($(tempnode.north)!0.9!(tempnode.north west)$) {#1};
\end{tikzpicture}}
\par
}
\begin{document}
\lipsum[1]
\mybox{Test 1}{$\int\limits_{e}^{\pi}\log_2 x\ dx$}{}{}
\lipsum[2]
\mybox{Test 2}{$\int\limits_{e}^{\pi}\log_2 x\ dx$}{red,densely dotted,ultra thick,fill=yellow!30}{text=red,rounded corners=3mm,font=\Huge,circle}
\lipsum[3]
\mybox{Test 3}{$\int\limits_{e}^{\pi}\log_2 x\ dx$}{text=yellow,inner color=blue,outer color=red,rounded corners=10mm}{left color=orange,right color=yellow,rounded corners=3mm,draw}
\lipsum[4]
\end{document}