调整以下交换方块的最简单方法是什么,以使所有箭头都呈大约 45 度角(两个指向东北,两个指向东南)?天真地,我想象节点以网格为中心,然后相对于网格上节点的位置绘制箭头,忽略文本的大小。
我希望解决方案基于 tikz-cd。硬编码宽度就可以了。
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
& P \mid z(y).Q \arrow[dr, "z(y)"] \\
(x(y).P) \mid z(y).Q
\arrow[ur, "x(y)"] \arrow[dr, "z(y)"'] & & P' \\
& (x(y).P) \mid Q \arrow[ur, "x(y)"']
\end{tikzcd}
\end{document}
我尝试了这里描述的几个较简单的解决方案,但没有取得太大成功:
答案1
您缺少两个&
符号。我猜,这就是最明显的解决方案(见下文)对您不起作用的原因。
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}[column sep={3cm,between origins},row sep={3cm,between origins}]
& P \mid z(y).Q \arrow[dr, "z(y)"] & \\ % <= here
(x(y).P) \mid z(y).Q
\arrow[ur, "x(y)"] \arrow[dr, "z(y)"'] & & P' \\
& (x(y).P) \mid Q \arrow[ur, "x(y)"'] & % <= here
\end{tikzcd}
\end{document}
这是精确的,而不是“大约 45 度”
更新:
OP 要求between origins
稍微解释一下该参数。
正常方法tikz-cd
是设置距离之间单元格。如果您有一个包含大量文本的单元格,则此列将显得非常宽,因为左列和右列的距离(分隔符)将保持不变。如果您希望每列具有相同的宽度(当然是行和列),您可以设置单元格中心之间的距离。在这种情况下,无论单元格包含多少内容,列都将保持相同的宽度。
我尝试用图形来解释一下:
% arara: lualatex
\documentclass{article}
\usepackage{tikz-cd}
\usepackage{lua-visual-debug}
\begin{document}
\begin{tikzcd}[column sep={1cm,between origins},row sep={1cm,between origins}]
A & B\\
C & D
\end{tikzcd}
\begin{tikzcd}[column sep={1cm},row sep={1cm}]
A & B\\
C & D
\end{tikzcd}
\begin{tikzcd}[column sep={1cm,between origins},row sep={1cm,between origins}]
AAAAAA & B\\
C & D
\end{tikzcd}
\begin{tikzcd}[column sep={1cm},row sep={1cm}]
AAAAAA & B\\
C & D
\end{tikzcd}
\end{document}