tikz中节点文本的自动换行

tikz中节点文本的自动换行

\nodebytikz实现了文本高亮的效果,除了节点文本不能自动换行之外,其他都还行,有没有更好的方法实现?MWE:

\documentclass{article}
\usepackage{tikz,picture,eso-pic,calc,etoolbox}
\begin{document}
\hspace{20em}yellow green wood \tikz[baseline] \node[fill=gray!20, anchor=base,inner sep=0pt] {yellow green wood yellow green wood }; yellow green wood 
\end{document}

在此处输入图片描述

答案1

我查看了一些相关问题,可能有一个可以满足您需求的设置。两个要素:

  • \measureremainder提供的命令此用户。这使我们能够在使用 tikz 节点之前记录一行中剩余空格的长度。
  • varwidth来自 varwidth 包的环境。这是一个可变宽度的迷你页面,我们可以使用它里面一个节点。

最简短的序言:

\documentclass{article}
\usepackage{tikz}
\usepackage{tikzpagenodes} % \measureremainder
\usetikzlibrary{calc} % \measureremainder
\usepackage{varwidth} % varwidth environment

\newcommand{\measureremainder}[1]{%
\begin{tikzpicture}[overlay,remember picture]
    % measure distance to right text border
    \path let \p0 = (0,0), \p1 = (current page text area.east) in
        [/utils/exec={\pgfmathsetlength#1{\x1-\x0}\global#1=#1}];
\end{tikzpicture}%
}
\newlength{\whatsleft}  % length to be used in nodes

首先,在调用之前立即\tikz用 保存剩余行的长度\measureremainder{\whatsleft}。然后,您可以将text width节点的属性设置为此值:

\begin{document}
    This is a very long line of example text before a node.
    \measureremainder{\whatsleft}
    \tikz[baseline] \node[fill=gray!20, anchor=base,inner sep=0pt, text width=\whatsleft] 
    {This is example text inside a node.}; 
    This is a long line of example text following a node.
\end{document}

这会使节点中的文本环绕: 输出1

但这意味着节点将始终跨越线的其余部分,这可能并不是我们所希望的:

\begin{document}
    This is a long line.
    \measureremainder{\whatsleft}\tikz[baseline] \node[fill=gray!20, anchor=base,inner sep=0pt, text width=\whatsleft] 
    {This is example text inside a node.}; This is a long line of example text.
\end{document}

输出2

(困难在于 tikz 节点没有等效的max width属性)。

\whatsleft我们可以通过使用环境参数来解决这个问题varwidth

\begin{document}
    This is a long line.
    \measureremainder{\whatsleft}\tikz[baseline]\node[fill=gray!20, anchor=base,inner sep=0pt] 
    {\begin{varwidth}{\whatsleft}
        This is example text inside a node.
    \end{varwidth}};
    This is a long line of example text following a node.
\end{document}

输出3

总而言之,我不认为 tikz 节点真的是为了这个目的而设计的 - 您是否尝试过使用普通的\fbox\parbox命令?(有关这些内容的信息可以在LaTeX/Boxes 维基百科页面

相关内容