如何不覆盖节点的标签和文本

如何不覆盖节点的标签和文本

我想要将节点的标签包含在节点中,我使用 label = {[below]: label} 但如果这样做,节点的文本会写在标签上方。如何使节点的内容仅在标签下方开始。

\documentclass{article}

\usepackage{tikz}

\begin{document}

 \begin{tikzpicture}
 \node[text width=6em,draw,label={[below,draw]:label}] 
 { un texte un peu long sur plusieurs lignes};
 \end{tikzpicture}

\end{document}

答案1

如果需要使用,TikZ您可以执行命令(或pic)。一个节点内有两个不同的节点fit

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning, fit}

\newcommand{\mynode}[2]{%
 \node[text width=6em, outer sep=0pt] (a) 
 {#2};
 \node[draw, above=0pt of a, outer sep=0pt] (b) 
 {#1};
 \node[fit=(a) (b), draw, inner sep=0pt]{};
}

\begin{document}

 \begin{tikzpicture}
 \node[text width=6em,draw,label={[below,draw]:label}] 
 { un texte un peu long sur plusieurs lignes};
 \end{tikzpicture}

 \begin{tikzpicture}
 \mynode{label}{ un texte un peu long sur plusieurs lignes}
 \end{tikzpicture}

\end{document}

在此处输入图片描述

如果你能接受,tcolorbox解决方案可能是:

\documentclass{article}

\usepackage[most]{tcolorbox}

\newtcolorbox{mybox}[2][]{
    title=#2,
    enhanced,
    sharp corners,
    size=small,
    colback=white,
    attach boxed title to top center={yshift*=-\tcboxedtitleheight},
    text width=6em,
    halign=flush left,
    coltitle=black,
    boxed title style={colback=white, sharp corners, size=small},
    #1
    }

\begin{document}
\begin{mybox}{label}
un texte un peu long sur plusieurs lignes
\end{mybox}
\end{document}

在此处输入图片描述

编辑:rpapa 提醒了我自己的回答TikZ:如何在一侧(例如在矩形的右侧)定义具有自定义内部分离的节点?使其适应新的方案,可以做类似的事情:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{fit, positioning}

\tikzset{
    withlabel/.style={%
        append after command={%
            \pgfextra
                    \node[draw, anchor=south, outer sep=0pt] (\tikzlastnode-label) at (\tikzlastnode.north) {#1};
                \node[fit={(\tikzlastnode) (\tikzlastnode-label)}, 
                draw, inner sep=0pt]  (\tikzlastnode) {};\endpgfextra}}
    }
\begin{document}
    \begin{tikzpicture}
    \node[text width=6em, withlabel={label a}] (a) {some long text which uses more than one line};

    \node[text width=8em, withlabel={label b}, right=of a] (b) {some long text which uses more than one line};

    \node[text width=10em, withlabel={label c}, below left=2cm and 1cm of b] (c) {some long text which uses more than one line};

    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

Ignasi 的良好答案的替代方法是简单地将节点放大一点,minimum height然后手动移动文本。

\documentclass{article}

\usepackage{tikz}

\begin{document}

 \begin{tikzpicture}
 \node[text width=6em,draw,label={[below,draw]:label},minimum height=2.5cm,
 text depth=0.5cm] 
 { un texte un peu long sur plusieurs lignes};
 \end{tikzpicture}

\end{document}

在此处输入图片描述

这种方法的代码较短,但您需要手动minimum height调整。text depth

相关内容