带有常规文本和矩形内文本的 Tikz 节点

带有常规文本和矩形内文本的 Tikz 节点

我想用 tikz 绘制以下内容:

在此处输入图片描述

那是,

abc,然后def是绿色并且被红色矩形包围,然后是,

我现在有三个不同的节点。但它们彼此之间没有对齐,而且它们之间的距离是我任意选择的,这不系统;如果我更改字体和字体大小,则可能需要修改距离。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node at (0,0) (A) {abc,};
\node[draw,color=red,right = 1ex of A] (B) {\textcolor{blue}{def}};
\node[right = 1ex of B] (C) {,};
\end{tikzpicture}
\end{document}

我的输出: 在此处输入图片描述

答案1

\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{tikzmark, fit}
\begin{document}
\begin{tikzpicture}[remember picture]
\node {abc, \subnode{sub}{\textcolor{green}{def}} ,};
\node[fit=(sub), draw, inner sep=0pt, red] {};
\end{tikzpicture}
\end{document}

部分文本带有颜色和边框

答案2

此版本使用保存箱。

\documentclass{standalone}% so I don't have to crop it
\usepackage{tikz}

\begin{document}
\bgroup% use local registers
\sbox0{\begin{tikzpicture}[baseline=(B.base)]
  \node[draw=red, text=blue] (B) {def};
\end{tikzpicture}}%
\begin{tikzpicture}
\node at (0,0) (A) {abc, \usebox0,};
\end{tikzpicture}
\egroup
\end{document}

演示

答案3

对于一个简单的矩形,就\fbox足够了。

在这个例子中,我忽略inner ysep并假设它具有与 相同的值inner xsep

代码

\documentclass[tikz, border=1cm]{standalone}
\DeclareDocumentCommand{\node}{O{.}O{.}m}{%
  \vphantom{#3}\smash{%
    \setlength\fboxrule{\pgflinewidth}%
    \pgfmathsetlength\fboxsep{\pgfkeysvalueof{/pgf/inner xsep}-.5\pgflinewidth}%
    \textcolor{#1}{\fbox{\textcolor{#2}{#3}}}%
  }%
}
\begin{document}
\tikz\node{abc,\node[red][green]{def},};
\end{document}

输出

在此处输入图片描述

相关内容