Tikz – 带中断的文本周围的框/框架

Tikz – 带中断的文本周围的框/框架

有人知道创建一个围绕文本的框/框架的技巧吗?像这样: 在此处输入图片描述 我猜它最适合与 配合使用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 版本,仅使用xcolorgrabboxgrabbox实际上不是必需的,但通过这种方式,您可以\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}

在此处输入图片描述

相关内容