我想要将节点的标签包含在节点中,我使用 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