TransWikia.com

TikZ node text margins

TeX - LaTeX Asked on November 21, 2021

I have nodes with text inside, however the nodes are too large for the text, with large margins.

I want to keep the text size the same, but make the box tighter. I’ve tried varying text height and width, as well as inner seps, however these only move the text around.

The code below produces the following output:

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={sffamilyscriptsize}]
  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}

enter image description here
However, I am looking for something more like:

enter image description here

3 Answers

This is not an answer but a long comment. If OP just want colored boxes for short texts, an alternative to TikZ could be tcolorbox. It's easier to decide margins because they (top, bottom, left and right) are independent, it's easier to decide alignment, ...

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=sffamilyscriptsize, 
    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}

enter image description here

Answered by Ignasi on November 21, 2021

See answers on your previous question.

  • In accepted answer the size of nodes is set by
base/.default = 17mm

This size you can locally change, for example as

node (1a) [CB=13mm] {Lorem};`
  • However, if in your node text has only one line, than you should redefine the style Core as follows:
    Core/.style={fill=CoreBlue},

In this case distances between text in node and node borders is equal to default value of inner sep. If you not like this distance size, you can change it with style parameter inner sep, for example as:

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

A complete MWE using style names from my answer is:

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}

enter image description here

Note: it is not entirely clear what is your problem. You should provide more context of using your nodes and how they should be designed.

Answered by Zarko on November 21, 2021

You are setting minimum width=12mm and minimum height=8mm so your box is going to be at least this big and you will have "large margins" unless your text can fill the void. If you do not want the margins then take out the minimum width and height specifications. If, in addition, you add inner sep=0.5mm then you get pretty close to what you are asking for:

enter image description here

(I've zoomed in on the image, which is why it is slightly bigger than above.) Now that the width and height are not fixed, tikz is able to adjust the size of the box so that it fits the text.

Here's the updated code:

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={sffamilyscriptsize}]
  node[Core,inner sep=0.5mm,anchor=west,
  ] (1) at (0,0) {scriptsize Lorem};
end{tikzpicture}
end{document}

Answered by user30471 on November 21, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP