我有包含文本的节点,但是节点对于文本来说太大,并且填充也很大。
我想保持文本大小不变,但使框更紧凑。我尝试过改变文本高度和宽度以及inner sep
s,但是这些只会移动文本。
下面的代码产生以下输出:
\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=12mm
,minimum 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}