推出交换图

推出交换图

有人可以一步一步地向我解释一下文档命令上方的这个命令吗:

\documentclass{article}

\usepackage{amssymb,amsmath}
\usepackage{xypic}
\usepackage[czech]{babel}
\newcommand{\pullbackcorner}[1][dl]{\save*!/#1-1pc/#1:(1,-1)@^{|-}\restore}

\begin{document}
      $$
  \xymatrix@=3pc{
    & & D \\
    B \ar[r]\ar@/^/[rru]^{h} & P \ar[ru] \pullbackcorner & \\
    A \ar [u]^f \ar[r]_g & C \ar[u]\ar@/_/[ruu]_{k} &
  }
  $$
\end{document}

它按预期工作,但是我不知道如何操作。

答案1

此命令中有很多内容需要解压,但其中大部分只是常规的 XY 语法,除非你经常使用它(而我不会),否则很难理解。

也许您不理解的部分\save ... \restore正是理解命令如何工作的关键部分。所以我将从一个非常简单的例子开始,然后我们一点一点地建立起来。

从历史记录来看,该宏本身的原始来源似乎已经丢失,但在 XY 邮件列表的档案中对它有一个早期的引用(承认来源未知):https://tug.org/pipermail/xy-pic/2001-July/000015.html

运营商

该命令的基本部分使用*运算符来放置任意文本。要了解其工作原理,让我们使用*在图表中放置一个红色 X:

\[
  \xymatrix@=3pc{
    & & D \\
    B \ar[r]\ar@/^/[rru]^{h} & P \ar[ru] *{\color{red} X} & \\
    A \ar [u]^f \ar[r]_g & C \ar[u]\ar@/_/[ruu]_{k} &
  }
\]

片段输出

由于此*代码位于命令的末尾\ar,它将文本放在箭头的末尾,最终位于 D 的正上方。因为这只是为了说明目的,所以我们不关心这一点。

\保存和\恢复

现在让我们做同样的事情,但是将*代码包装在{\save ... \restore}

\[
  \xymatrix@=3pc{
    & & D \\
    B \ar[r]\ar@/^/[rru]^{h} & P \ar[ru] \save*{\color{red} X}\restore & \\
    A \ar [u]^f \ar[r]_g & C \ar[u]\ar@/_/[ruu]_{k} &
  }
\]

现在 X 就在 P 的正上方。这就是\save\restore的作用。它们允许添加对象相对于当前位置。在这种情况下,当前位置是不是箭头的终点。

片段输出

定位参数

这就是该命令的基本功能\pullbackcorner。它将任意文本(在本例中为角符号)放置在相对于当前位置的位置,而不是路径的末尾。因此,我们现在可以解开该命令的其余部分:

\newcommand{\pullbackcorner}[1][dl]{\save*!/#1-1pc/#1:(1,-1)@^{|-}\restore}

\pullbackcorner一个宏,它接受一个可选参数(方向指定),其默认值为dl。这是\newcommand{\pullbackcorner}[1][dl]宏的一部分。

然后,它将角符号@^{|-}(实际上不是一个符号,而是众多xy-pic箭头之一)放置1pc在远离当前位置的方向dl/#1-1pc/默认情况下#1dl),方向由笛卡尔坐标设置#1:(1,-1),即相对于#1(默认情况下dl)将原点设置为(1,-1)。更改值1pc将使角靠近或远离当前位置,更改值(1,-1)将更改角本身的方向。

以下是一些改变这些值的示例:

我们可以将角移得更远一些:

\renewcommand{\pullbackcorner}[1][dl]{\save*!/#1-3pc/#1:(1,-1)@^{|-}\restore}

\[
  \xymatrix@=3pc{
    & & D \\
    B \ar[r]\ar@/^/[rru]^{h} & P \ar[ru] \pullbackcorner & \\
    A \ar [u]^f \ar[r]_g & C \ar[u]\ar@/_/[ruu]_{k} &
  }
\]

片段输出

我们可以旋转角:

\renewcommand{\pullbackcorner}[1][dl]{\save*!/#1-1pc/#1:(-1,1)@^{|-}\restore}

\[
  \xymatrix@=3pc{
    & & D \\
    B \ar[r]\ar@/^/[rru]^{h} & P \ar[ru] \pullbackcorner & \\
    A \ar [u]^f \ar[r]_g & C \ar[u]\ar@/_/[ruu]_{k} &
  }
\]

片段输出

我们可以向宏提供一个可选参数来改变角的相对定位(在此示例中为ul)。

\[
  \xymatrix@=3pc{
    & & D \\
    B \ar[r]\ar@/^/[rru]^{h} & P \ar[ru] \pullbackcorner[ul] & \\
    A \ar [u]^f \ar[r]_g & C \ar[u]\ar@/_/[ruu]_{k} &
  }
\]

片段输出

相关内容