tikz:使文本精确适合节点(梯形)

tikz:使文本精确适合节点(梯形)

此 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将从到变化14并且\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}

在此处输入图片描述

相关内容