![tikz:使文本精确适合节点(梯形)](https://linux22.com/image/432262/tikz%EF%BC%9A%E4%BD%BF%E6%96%87%E6%9C%AC%E7%B2%BE%E7%A1%AE%E9%80%82%E5%90%88%E8%8A%82%E7%82%B9%EF%BC%88%E6%A2%AF%E5%BD%A2%EF%BC%89.png)
此 LaTeX 来源:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}
\node[trapezium, draw, trapezium left angle=120, trapezium right angle=90,text width=8cm] (labelTransform) at (0,0) {Very long and interesting description of sometfing. We also add some more text and also symbols like $\tau$, $\phi$ or $\aleph$ to look exceptionaly scientific. Moreover, this way we make the text even longer.};
\end{tikzpicture}
\end{document}
给出这个输出
是否有可能使节点看起来像这样:
感谢帮助!
编辑:感谢 Ivan 的回复,我实际上得到了这个代码:
\documentclass{article}
\usepackage{tikz}
\usepackage{shapepar}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}
\newcommand{\trapeziumParShape}{
{-2}
{0}b{-2}\\
{0}t{-2}{19}\\
{5}t{2.5}{14.5}\\
{5}e{2.5}
}
\node[trapezium, draw, trapezium left angle=120, trapezium right angle=90] at (0,0) {
\begin{minipage}{\textwidth}
\Shapepar{\trapeziumParShape}Very long and interesting description of sometfing. We also add some more text and also symbols like $\tau$, $\phi$ or $\aleph$ to look exceptionaly scientific. Moreover, this way we make the text even longer.
\end{minipage}
};
\end{tikzpicture}
\end{document}
结果是:
并且不知道如何将节点内的文本移动到适当的位置。
答案1
稍后查看 SHAPEPAR 方法
这是一种 hack,因此不鼓励使用。我所做的是使用tabstackengine
来设置文本(即使我没有制表符)。缺点是这里需要手动换行。因此,线条也会参差不齐。
那么 hack 是什么?我将堆栈左对齐 ( \tabbedCenterstack[l]
) 并使用该\TABstackTextstyle
功能将宏应用于每个单元格(它不打算接受参数,而是为每个单元格指定形状、字体大小等)。但是,我使用的宏是\traptab
读取两个参数的!
它将它们重新整理(因此不会丢失任何内容),但会将其用作参数#2
的一部分\hspace
。这是因为我知道(编写包后)首先\TABstackTextstyle
会找到一个特殊的 strut 命令,其参数与行号相对应(strut 用于设置行基线跳过或行间间隙)。因此,它traptab
所做的就是减去与总行数减去当前行号相对应的空格(在此示例中,#2
将从到变化1
,4
并且\TABstack@rows
始终为 4)。
我设置\thetraptab
为 8pt,这样第一行左移 24pt,第二行左移 16pt,第三行左移 8pt,第四行左移 0pt。
真恶心!不过它就在这儿。
\documentclass{article}
\usepackage{tikz}
\usepackage{tabstackengine}
\usetikzlibrary{shapes.geometric}
\def\thetraptab{8pt}
\makeatletter
\def\traptab#1#2{#1{#2}\hspace{\numexpr#2-\TABstack@rows\relax
\dimexpr\thetraptab\relax}}
\makeatother
\TABstackTextstyle{\traptab}
\begin{document}
\begin{tikzpicture}
\node[trapezium, draw, trapezium left angle=120, trapezium right angle=90,text width=8cm] (labelTransform) at (0,0) {%
\tabbedCenterstack[l]{%
Very long and interesting description of something. We\\% <- MANUAL BREAKS
also add some more text and also symbols like $\tau$, $\phi$, or\\
$\aleph$ to look exceptionaly scientific. Moreover, this way\\
we make the text even longer.%
}};
\end{tikzpicture}
\end{document}
*沙佩帕
我不擅长shapepar...但是,
minipage
使用 OP 的代码,我做了一些更改:我改变了的宽度,并在 之前2.8in
添加了一个。我还调整了 shapepar 参数以实现 4 行堆栈。\hspace{-24pt}
\Shapepar
\documentclass{article}
\usepackage{tikz}
\usepackage{shapepar}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}
\newcommand{\trapeziumParShape}{
{-2}
{0}b{-3}\\
{0}t{-3}{18}\\
{4}t{0}{15}\\
{4}e{0}
}
\node[trapezium, draw, trapezium left angle=120, trapezium right angle=90] at (0,0) {
\begin{minipage}{2.8in}
\hspace{-24pt}%
\Shapepar{\trapeziumParShape}Very long and interesting description of sometfing. We also add some more text and also symbols like $\tau$, $\phi$ or $\aleph$ to look exceptionaly scientific. Moreover, this way we make the text even longer.
\end{minipage}
};
\end{tikzpicture}
\end{document}