TikZ 节点文本边距

TikZ 节点文本边距

我有包含文本的节点,但是节点对于文本来说太大,并且填充也很大。

我想保持文本大小不变,但使框更紧凑。我尝试过改变文本高度和宽度以及inner seps,但是这些只会移动文本。

下面的代码产生以下输出:

\documentclass[tikz, border=2mm]{standalone}

\usetikzlibrary{positioning,shapes,arrows,backgrounds,external,fit,calc}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}

\definecolor{CoreBlue}{HTML}{5b9bd5}

\tikzset{
    Core/.style={rectangle, draw, fill=CoreBlue,  draw opacity=0, text=white},
    }

\begin{document}
\begin{tikzpicture}[font={\sffamily\scriptsize}]
  \node[Core,minimum width=12mm,minimum height=8mm, anchor=west,
    % inner sep=-10mm,  % no change
    % inner ysep=-10mm,  % no change
    % text height=1mm,  % changes text position, but not node size
    % text width=0.2cm,  % changes text position, but not node size
  ] (1) at (0,0) {\scriptsize Lorem};
\end{tikzpicture}
\end{document}

在此处输入图片描述 然而,我正在寻找更类似的东西:

在此处输入图片描述

答案1

您正在设置minimum width=12mmminimum height=8mm所以您的框至少会这么大,除非您的文本可以填充空白,否则您将有“大边距”。如果您不想要边距,请取出最小宽度和高度规格。此外,如果您添加,inner sep=0.5mm那么您将非常接近您的要求:

在此处输入图片描述

(我放大了图像,这就是为什么它比上面稍微大一点。)现在宽度和高度不固定,tikz 能够调整框的大小以使其适合文本。

以下是更新后的代码:

\documentclass[tikz, border=2mm]{standalone}

\usetikzlibrary{positioning,shapes,arrows,backgrounds,external,fit,calc}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}

\definecolor{CoreBlue}{HTML}{5b9bd5}

\tikzset{
    Core/.style={rectangle, draw, fill=CoreBlue,  draw opacity=0, text=white},
    }

\begin{document}
\begin{tikzpicture}[font={\sffamily\scriptsize}]
  \node[Core,inner sep=0.5mm,anchor=west,
  ] (1) at (0,0) {\scriptsize Lorem};
\end{tikzpicture}
\end{document}

答案2

请参阅上一个问题的答案。

  • 在接受的答案中,节点的大小由以下公式设置:
base/.default = 17mm

您可以本地更改此尺寸,例如

\node (1a) [CB=13mm] {Lorem};`
  • 但是,如果节点文本只有一行,那么您应该重新定义样式,Core如下所示:
    Core/.style={fill=CoreBlue},

此时节点内文本与节点边框之间的距离等于默认值inner sep。如果你不喜欢这个距离大小,可以使用样式参数进行更改inner sep,例如:

    Core/.style={fill=CoreBlue, inner sep=3mm},

完整的 MWE,使用来自我的样式名称回答是:

\documentclass[tikz, border=2mm]{standalone}
\definecolor{CoreBlue}{HTML}{5b9bd5}
\definecolor{CoreOrange}{HTML}{ec7d2d}

\begin{document}
    \begin{tikzpicture}[
CB/.style = {fill=CoreBlue, inner sep=2mm}
                        ]
\node (1)  [CB] {Lorem};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

笔记:您遇到的问题是什么,这一点并不完全清楚。您应该提供更多有关使用节点以及如何设计节点的上下文。

答案3

这不是一个答案,而是一个长评论。如果 OP 只是想要彩色框来显示短文本,那么 的替代方案TikZ可能是tcolorbox。决定边距更容易,因为它们(顶部、底部、左侧和右侧)是独立的,决定对齐也更容易,...

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}

\usepackage[most]{tcolorbox}

\definecolor{CoreBlue}{HTML}{5b9bd5}

\newtcbox{\mybox}[1][]{%
    enhanced, colback=CoreBlue, fontupper=\sffamily\scriptsize, 
    sharp corners, frame hidden, colupper=white, #1}

\begin{document}
\mybox{Lorem}

\mybox[boxsep=0pt]{Lorem}

\mybox[left=5mm, right=1mm, top=1mm, bottom=0pt]{Lorem}

\mybox[size=small]{Lorem}

\mybox[size=tight]{Lorem}
\end{document}

在此处输入图片描述

相关内容