tikz-cd:将交换正方形绘制为实际正方形

tikz-cd:将交换正方形绘制为实际正方形

调整以下交换方块的最简单方法是什么,以使所有箭头都呈大约 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}

在此处输入图片描述

我尝试了这里描述的几个较简单的解决方案,但没有取得太大成功:

Tikz-cd:如何使对角箭头平行排列?

如何确保连续的对角箭头形成一条直线?

答案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} 

在此处输入图片描述

相关内容