![Tikz – 带中断的文本周围的框/框架](https://linux22.com/image/402513/Tikz%20%E2%80%93%20%E5%B8%A6%E4%B8%AD%E6%96%AD%E7%9A%84%E6%96%87%E6%9C%AC%E5%91%A8%E5%9B%B4%E7%9A%84%E6%A1%86%2F%E6%A1%86%E6%9E%B6.png)
有人知道创建一个围绕文本的框/框架的技巧吗?像这样:
我猜它最适合与 配合使用
tikz
。以下是文本的代码(无框架):
\documentclass{article}
\usepackage{fix-cm}
\usepackage{xcolor}
\begin{document}
\vspace*{3cm}
\begin{center}
{\fontsize{25}{10} \sffamily \color{black!45} Name xy}
\vspace{.5cm}
{\fontsize{75}{10} \sffamily \color{red} 2019}
\vspace{.5cm}
{\fontsize{25}{10} \sffamily \color{black!45} Name}
\end{center}
\end{document}
答案1
像这样?垂直距离由 控制inner ysep
,水平距离由 控制inner xsep
。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[font=\sffamily\bfseries]
\node[scale=4,red!60,inner xsep=1.5ex,inner ysep=0.5ex] (2019){2019};
\node[above,scale=2,gray!50] at (2019.north) (A) {Name xy};
\node[below,scale=2,gray!50] at (2019.south) (B) {Name};
\draw[thick,gray!50] (A.east) -| (2019.east|-B) -- (B.east)
(A.west) -| (2019.west|-B) -- (B.west);
\end{tikzpicture}
\end{document}
答案2
只是为了好玩钾无 Z 版本,仅使用xcolor
和grabbox
(grabbox
实际上不是必需的,但通过这种方式,您可以\verb
在大括号参数中使用和内容)。
的论证结构为\boxtext
:
- 可选参数指定顶部文本的固定宽度
- 顶部文本的强制参数
- 可选参数指定主文本的固定宽度
- 正文的强制参数
- 可选参数指定底部文本的固定宽度
- 底部文本的强制参数
如果您未指定固定宽度,则使用自然宽度,如果指定了固定宽度,则内容将使用 居中\centering
。
\documentclass[]{article}
\usepackage{xcolor}
\usepackage{grabbox}
\makeatletter
\colorlet{boxtextborder}{gray}
\newlength\toptextpad
\newlength\maintextpad
\newlength\bottomtextpad
\newlength\boxtextborder
\setlength\toptextpad{2pt}
\setlength\maintextpad{5pt}
\setlength\bottomtextpad{2pt}
\setlength\boxtextborder{.4pt}
\newlength\boxtext@maxwd
\newsavebox\boxtext@toptext
\newsavebox\boxtext@maintext
\newsavebox\boxtext@bottomtext
\def\myfi@Tb\fi#1#2#3{\fi#2}
\newcommand\boxtext@ifrelax[1]
{%
\ifx\relax#1%
\myfi@Tb
\fi
\@secondoftwo
}
\newcommand\boxtext[1][\relax]
{%
\boxtext@ifrelax{#1}
{\@grabbox{}\boxtext@toptext{\color{boxtextborder}}\hbox}
{\@grabbox{\hsize#1\centering}\boxtext@toptext{\color{boxtextborder}}\vbox}%
{}\boxtext@a
}
\newcommand\boxtext@a[1][\relax]
{%
\boxtext@ifrelax{#1}
{\@grabbox{}\boxtext@maintext{}\hbox}
{\@grabbox{\hsize#1\centering}\boxtext@maintext{}\vbox}%
{}\boxtext@b
}
\newcommand\boxtext@b[1][\relax]
{%
\boxtext@ifrelax{#1}
{\@grabbox{}\boxtext@bottomtext{\color{boxtextborder}}\hbox}
{\@grabbox{\hsize#1\centering}\boxtext@bottomtext{\color{boxtextborder}}\vbox}%
{}\boxtext@out
}
\newcommand*\boxtext@siderule
{%
\vrule
height
\dimexpr
\ht\boxtext@maintext+.5\ht\boxtext@toptext+.5\dp\boxtext@toptext
+\toptextpad+\maintextpad+.5\boxtextborder
\relax
depth
\dimexpr
\dp\boxtext@maintext+.5\ht\boxtext@bottomtext+.5\dp\boxtext@bottomtext
+\maintextpad+\bottomtextpad+.5\boxtextborder
\relax
width \boxtextborder
\relax
}
\newcommand*\boxtext@toprule
{%
\vrule
width
\dimexpr
(\boxtext@maxwd-\wd\boxtext@toptext)/2-\toptextpad
\relax
height
\dimexpr
\ht\boxtext@maintext+.5\ht\boxtext@toptext+.5\dp\boxtext@toptext
+\toptextpad+\maintextpad+.5\boxtextborder
\relax
depth
-\dimexpr
\ht\boxtext@maintext+.5\ht\boxtext@toptext+.5\dp\boxtext@toptext
+\toptextpad+\maintextpad-.5\boxtextborder
\relax
\relax
}
\newcommand*\boxtext@bottomrule
{%
\vrule
width
\dimexpr
(\boxtext@maxwd-\wd\boxtext@bottomtext)/2-\bottomtextpad
\relax
height
-\dimexpr
\dp\boxtext@maintext+.5\ht\boxtext@bottomtext+.5\dp\boxtext@bottomtext
+\maintextpad+\bottomtextpad-.5\boxtextborder
\relax
depth
\dimexpr
\dp\boxtext@maintext+.5\ht\boxtext@bottomtext+.5\dp\boxtext@bottomtext
+\maintextpad+\bottomtextpad+.5\boxtextborder
\relax
\relax
}
\newcommand*\boxtext@out
{%
\mbox
{%
\begingroup
\ifdim\wd\boxtext@maintext>\wd\boxtext@toptext
\ifdim\wd\boxtext@maintext>\wd\boxtext@bottomtext
\boxtext@maxwd\wd\boxtext@maintext
\else
\boxtext@maxwd\wd\boxtext@bottomtext
\fi
\else
\ifdim\wd\boxtext@toptext>\wd\boxtext@bottomtext
\boxtext@maxwd\wd\boxtext@toptext
\else
\boxtext@maxwd\wd\boxtext@bottomtext
\fi
\fi
\advance\boxtext@maxwd2\maintextpad
\color{boxtextborder}%
\boxtext@siderule
\rlap{\makebox[\boxtext@maxwd][c]{\usebox\boxtext@maintext}}%
\rlap
{%
\makebox[\boxtext@maxwd][c]
{%
\raisebox
{%
\dimexpr
\ht\boxtext@maintext+\dp\boxtext@toptext
+\maintextpad+\toptextpad
}
{\usebox\boxtext@toptext}%
}%
}%
\rlap
{%
\makebox[\boxtext@maxwd][c]
{%
\raisebox
{%
-\dimexpr
\dp\boxtext@maintext+\ht\boxtext@bottomtext
+\maintextpad+\bottomtextpad
}
{\usebox\boxtext@bottomtext}%
}%
}%
\rlap{\boxtext@toprule}%
\rlap{\boxtext@bottomrule}%
\hskip\boxtext@maxwd
\llap{\boxtext@toprule}%
\llap{\boxtext@bottomrule}%
\boxtext@siderule
\endgroup
}%
}
\makeatother
\begin{document}
\boxtext
{Name xy}
{\textcolor{red}{2019}}
{Name}%
\boxtext
{\textsf{Name xy}}
{{\sffamily\bfseries\huge\textcolor{red}{2019}}}
{\textsf{Name}}
\boxtext{Name xy}[5cm]{This is some text that is 5cm wide}{Name}
\end{document}