TikZ:如何旋转矩阵(节点)?

TikZ:如何旋转矩阵(节点)?

请考虑以下 TikZ 代码:

% aligning text in node: node[align=left] only in latest 2010 tikz:
% http://compgroups.net/comp.text.tex/-tikz-option-for-ragged-left-text-in-node
% or use minipage inside node: http://www.texample.net/tikz/examples/boxes-with-text-and-math/
% or also parbox: http://en.wikibooks.org/wiki/LaTeX/Advanced_Topics
%% note: parbox and minipage width 5em - will extend beyond the minimum width=5em!
% or use /tikz/text ragged:
% http://old.nabble.com/Equal-width-nodes-within-%22matrix-of-nodes%22--td15266855.html
\begin{tikzpicture}[font=\tt]
    \matrix (xA) [anchor=west,text ragged]
    {% 
        \node(xA1) [draw,right,minimum width=5em] {horizon1} ;  \\
        \node(xA2) [draw,right] {horiz2} ;  \\
%       \node(xA3) [draw,anchor=west,minimum width=5em] {\begin{minipage}{5em}hor3\end{minipage}} ; \\
        \node(xA3) [draw,anchor=west,minimum width=5em] {\parbox{5em}{hor3}} ;  \\
    };
    \matrix (yA) [below left=of xA]
    {% 
        \node(yA1) [draw,right,rotate=270] {vert1} ;    &
        \node(yA2) [draw,right,rotate=270] {vert2} ;    &
        \node(yA3) [draw,right,rotate=270] {vert3} ;    \\
    };
    \begin{scope}[rotate=270]
    \matrix (zA) [rotate=270,below left=of yA]
    {% 
        \node(zA1) [draw,right] {horvert1} ;    \\
        \node(zA2) [draw,right] {horvert2} ;    \\
        \node(zA3) [draw,right] {horvert3} ;    \\
    };  
    \end{scope}
\end{tikzpicture}

它生成以下图像:

tikz 矩阵 水平/垂直

我希望实现类似情况yA- 除了,我希望文本从右到左排列“vert1”、“vert2”、“vert3”(与显示的相反) - 这对应于图形xA旋转 270 度。

这就是我想对这个zA案例做的事情 - 但是,正如我们所见,根本没有任何旋转!

这是否意味着 TikZ 中节点矩阵无法旋转?如果不是,我该如何旋转这样的矩阵?

答案1

嗯,我想这就是答案,pgfmanual.pdf 第 487 页:

旋转和缩放。矩阵节点是从未旋转或移位,因为当前坐标变换矩阵在 \pgfmatrix 的开头被重置(平移部分除外)。这是故意的并且将来不会改变。如果您需要旋转矩阵,则必须自行安装适当的画布变换。

但是,节点和单元格图片里面的内容可以正常旋转和缩放。

...另外,来自具有倾斜选项的矩阵节点? - pgf-users

手册上确实说这是不可能的(见第 16.2 节“矩阵是节点”),并且变换矩阵在矩阵开始时重置。 的(内部)使用\halign排除了任何类型的奇特变换。如果不使用 ,则很难进行矩阵计算\halign

... 然而 ...

...具有倾斜选项的矩阵节点? - pgf-users还说:

的确。

但是,您可以执行以下操作:将整个节点放入 中
tikzpicture,然后将其放入具有倾斜
选项的节点中。例如

... (A) -- (B) node[midway,sloped] {\tikz \matrix ...;};

这意味着上面的代码可以像这样修改:

\begin{tikzpicture}[font=\tt]
    \matrix (xA) [anchor=west,text ragged]
    {% 
        \node(xA1) [draw,right,minimum width=5em] {horizon1} ;  \\
        \node(xA2) [draw,right] {horiz2} ;  \\
%       \node(xA3) [draw,anchor=west,minimum width=5em] {\begin{minipage}{5em}hor3\end{minipage}} ; \\
        \node(xA3) [draw,anchor=west,minimum width=5em] {\parbox{5em}{hor3}} ;  \\
    };
    \matrix (yA) [below left=of xA]
    {% 
        \node(yA1) [draw,right,rotate=270] {vert1} ;    &
        \node(yA2) [draw,right,rotate=270] {vert2} ;    &
        \node(yA3) [draw,right,rotate=270] {vert3} ;    \\
    };
    \node (zzA) [rotate=270,below left=of yA] {
        \tikz \matrix (zA) 
        {% 
            \node(zA1) [draw,right] {horvert1} ;    \\
            \node(zA2) [draw,right] {horvert2} ;    \\
            \node(zA3) [draw,right] {horvert3} ;    \\
        };  
    };
\end{tikzpicture}

...最终将得到最初想要的图像:

tikz hor/垂直矩阵旋转 OK

相关内容