Controlling Line Breaks And Alignment In Tikz Nodes
Breaking Text in Tikz Nodes
Tikz nodes allow text to span multiple lines within a node. There are several techniques to intentionally break text across lines in Tikz including using the newline command, \textbackslash newline, adjusting text width, and forcing line breaks with \textbackslash par.
Using \textbackslash newline and \textbackslash break
The \textbackslash newline command forces a line break at the location it is inserted within the text in a Tikz node. This creates a new line, allowing the text to wrap inside the node box. The related \textbackslash break command works similarly but creates a break between words if possible instead of within a word.
For example, to break the text "This is some example text" across multiple lines in a node:
\node {This is some \textbackslash newline example \textbackslash newline text};
Which would display as:
This is some example text
Using \textbackslash break instead of the second \textbackslash newline would try to break between words:
This is some \textbackslash newline example \textbackslash break text
By manually inserting newlines, you can control where text wraps to new lines within nodes. This allows aligning separate parts of text to each line.
Adjusting text width with text width key
The text width key adjusts the maximum width for text within a Tikz node before it automatically wraps to a new line. By setting a smaller text width, you can force text to wrap onto multiple lines as needed.
For example, to set the text width to a specific size:
\node [text width=2cm] {This is some example text};
Adjusting the text width value will change where the text breaks to new lines. Smaller values cause earlier line wrapping and more lines occupied by the text.
Forcing line breaks with \textbackslash par
The \textbackslash par command forces a new paragraph, guaranteeing that any following text will start on a new line.
For example:
\node {This is the first paragraph \textbackslash par And this starts a new paragraph};
Which displays as:
This is the first paragraph And this starts a new paragraph
You can use \textbackslash par within nodes to separate blocks of text onto different lines as needed.
Aligning Text in Tikz Nodes
Tikz provides alignment options to position text within nodes, including centered, left or right aligned, and justified text. These help organize multi-line text.
Centering text blocks
By default, text inside Tikz nodes is centered. The text anchor=center option can also be used to explicitly center text:
\node [text anchor=center] {This centered text};
Centered text alignment places any multiline text in the center column of the node, with equal horizontal whitespace on the left and right sides.
Left and right aligning text
To left or right align multiline text in Tikz nodes, the text anchor key can be set to west or east respectively. For example:
\node [text anchor=west] {This left-aligned text}; \node [text anchor=east] {This right-aligned text};
Left alignment places text at the western edge of the node, with even spacing to the right edge. Right alignment is opposite, anchored on the east with whitespace to the left border.
Justifying text blocks
The align=justify option makes all lines of multiline text stretch to reach both side borders, apart from the last line. This creates flush left and right sides but unequal spacing between words.
For example:
\node [align=justify] {This is some example justified text in a Tikz node};
The justify text alignment is useful for creating uniform node edges on left and right sides when using multiline text.
Positioning Multiple Lines
Tikz provides options for fine tuning the position of text lines using baseline and depth measurements, row and column spacing, and grid layouts.
Using baseline and text depth
The baseline key positions nodes based on the baseline of text, where bottom alignment uses the depth. Adjusting these can tweak vertical positioning of multiline text.
For example, to lower text 5mm from its baseline position:
\node [baseline=-5mm] {text};
Similarly, setting the text depth adjusts alignment relative to the bottom line descenders. Together, tweaking baseline and depth allows precision control of vertical text positioning in nodes.
Adjusting row and column spacing
The Tikz column sep and row sep keys control horizontal and vertical spacing respectively between lines of text in nodes.
For example, to expand spacing:
\node [column sep=10mm, row sep=15mm] {multiline text};
Increasing column and row separation spreads out text lines for greater line spacing control.
Aligning nodes with grid layouts
The Tikz matrix library can create grid layouts of nodes, automatically aligning separate nodes. This allows aligning text baseline across different nodes.
For example, to align two multiline nodes on the y coordinate:
\matrix{ \node {First node}; \\ \node {Second node}; \\ };
Grids provide powerful alignment of whole nodes containing multiline text.
Example Codes
Here are some examples demonstrating text wrapping, alignment, sizing, and positioning techniques covered, using practical Tikz code.
Text wrapping and alignment
This illustrates manual and automatic text wrapping, left/right alignment, and justification:
\node [align=right, text width=2cm] {This is right-aligned wrapped text}; \node [align=left] {Short \textbackslash newline Multiline \textbackslash newline Text}; \node [align=justify] {This paragraph of text is fully justified within the node};
Multi-line nodes with grids
This shows a grid of nodes with centered and baseline aligned multiline text:
\matrix{ \node {First node centered}; \\ \node [baseline] {Second node baseline aligned}; \\ };
Custom text styles and sizes
This demonstrates adjusting text size and font families:
\node [font=\huge\bfseries] {Large bold heading text}; \node [font=\small\ttfamily] {This is inline code style text};
Tikz text can customize all aspects of font styling as needed.