![Tikz:具有局部坐标系的范围](https://linux22.com/image/403404/Tikz%EF%BC%9A%E5%85%B7%E6%9C%89%E5%B1%80%E9%83%A8%E5%9D%90%E6%A0%87%E7%B3%BB%E7%9A%84%E8%8C%83%E5%9B%B4.png)
我制作了一个带有坐标系的页面(以红色显示),其中 (0,0) 位于页面的左上角,坐标向页面的右下角增加。
现在我想为页面的右半部分设置一个旋转的范围(以绿色显示),如下所示:
\documentclass{article}
\pagestyle{empty}
\usepackage[paperheight=17cm,paperwidth=23cm]{geometry}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
every node/.style={draw, rectangle},
remember picture, overlay,
shift={(current page.north west)},yscale=-1 % (0,0) at the top left corner
]
\begin{scope}[shift={(current page.south)},rotate=90,transform shape]
\begin{scope}[xscale=-1,yscale=-1]
\node at (0,0){B};
\node at (1,1){F};
\end{scope}
\end{scope}
\end{tikzpicture}
\end{document}
但只要我得到正确的坐标方向,内容就会镜像:
就像内部范围继承了外部范围的“变换形状”或类似的东西。
答案1
tikzpicture
是的,内部作用域从环境作用域继承了键。这是嵌套s 存在问题的主要原因。您可以transform shape=false
在内部作用域中使用。
\documentclass{article}
\pagestyle{empty}
\usepackage[paperheight=17cm,paperwidth=23cm]{geometry}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
every node/.style={draw, rectangle},
remember picture, overlay,
shift={(current page.north west)},yscale=-1 % (0,0) at the top left corner
]
\begin{scope}[shift={(current page.south)},rotate=90,transform shape]
\begin{scope}[xscale=-1,yscale=-1,transform shape=false]
\node at (0,0){B};
\node at (1,1){F};
\end{scope}
\end{scope}
\end{tikzpicture}
\end{document}
答案2
好的,我找到了问题:
transform shape
是节点的属性,而不是范围的属性,因此无法说“将应用于rotate
节点,但不应用于xscale
”。
但是,xscale
和yscale
对于建立局部坐标系来说不是必需的。我不确定我为什么一开始就使用它们,但是x
和y
同样有效,因为它们不是转型它们不会扭曲内容:
\documentclass{article}
\pagestyle{empty}
\usepackage[paperheight=17cm,paperwidth=23cm]{geometry}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
every node/.style={draw, rectangle},
remember picture, overlay,
shift={(current page.north west)},y=-1cm % (0,0) at the top left corner
]
\begin{scope}[shift={(current page.south)},rotate=90,transform shape]
\node at (0,0){B};
\node at (1,1){F};
\end{scope}
\end{tikzpicture}
\end{document}