将 2cell 选项中的 xtwocell 箭头方向改为 xy

将 2cell 选项中的 xtwocell 箭头方向改为 xy

我正在尝试制作类似这样的图表(来自维基百科

庵延拓圖

除了我希望双箭头 $\eta$ two 从节点 $B$ 指向箭头 $X$ 的中间(毕竟,这是从 $RF$ 到 $X$ 的自然变换)。

我正在尝试使用\xtwocell2cell 包的命令来处理 xy。在xyrefer 手册,其中规定

\xtwocell[⟨hop⟩]{⟨displace⟩}...连接到由 ⟨displace⟩ 偏移的 ⟨pos⟩,该偏移与由 ⟨hop⟩ 指定的相对单元格位置相距甚远。偏移可以是任何有效的 XY-pic 命令字符串,但它们必须包含在组 {...} 中。当单元格位置是目标时,必须给出一个空分组 {}。当与 <\omit> 微调一起使用时,此类偏移允许将标记箭头放置在 XY-pic 图中的任何位置;此外,箭头可以定向为指向任何方向。

当然,手册中没有给出任何示例,也没有进一步评论如何改变箭头的方向(在本手册中,大写的“箭头”指的是箭头之间的双箭头,即 2 格)。

他说的“任何有效的 XY-pic 命令字符串”是什么意思?位移参数可能\xtwocell是什么?我尝试过的任何实验(例如 <1>,dr,[0,1])都只是在花括号中输入了 $A$ 节点文本,因此不会被解释为位移、位置或方向。我如何更改箭头的方向?我如何实现承诺给我的“任意方向”?

这是我的简单标记

\xymatrix{
A\ar[d]\ar[r]\xtwocell[0,1]{}\omit{<2>} & B\\
C\ar@{.>}[ur] &
}

得到下面的图像

坏图

我想改变双箭头指向的方向,使其指向角落物体 $C$,或者反转它。我可以通过更改 中的数字来移动它\omit{<2>},但如何改变方向?

(谷歌告诉我同样的问题被问到在 xy 邮件列表上,但从未回答)

另请参阅我的问题在 xy 的 2cell 包中的复合图中间标记源/目标对象?在此图中尝试另一种方法。

答案1

如果你考虑使用tikz-cd,这可以很容易地实现

  • 命名节点 ( name=X) 和
  • 样式to node(见下文)。

该参数\arrow通常表示方向/目标节点将被忽略。

对于较短的箭头,我会使用short我对你的另一个问题的回答中的样式在 xy 的 2cell 包中的复合图中间标记源/目标对象?

您可以使用键short shift >short shift <short center来调整箭头。

代码A

\documentclass[tikz,convert=false]{standalone}
\usepackage{tikz-cd}
\pgfkeys{
  /tikz/commutative diagrams/to node/.style={%
    /tikz/execute at begin to=\edef\tikztotarget{#1}},
  /tikz/commutative diagrams/to node*/.style={
    /tikz/commutative diagrams/to node={#1},
    /tikz/shorten >=\pgfkeysvalueof{/tikz/commutative diagrams/to node shorten >}},
  /tikz/commutative diagrams/to node shorten >/.initial=+.5ex}
\begin{document}
\begin{tikzcd}[column sep=large]
 A \rar[][name=X]{X}
   \dar[swap]{F}
   & B \\
 C \urar[dashed][swap]{R}
   \arrow[Rightarrow, to node*=X]{}{\eta}
\end{tikzcd}
\end{document}

输出 A

在此处输入图片描述

代码 B

\documentclass[tikz,convert]{standalone}
\usetikzlibrary{decorations.pathreplacing}
\usepackage{tikz-cd}
\newcommand*{\tikzcdset}{\pgfqkeys{/tikz/commutative diagrams}}
\tikzcdset{
  to node/.style={%
    /tikz/execute at begin to=\edef\tikztotarget{#1}}}
\makeatletter
\tikzcdset{
  short shift >/.initial=+.6em,
  short shift </.initial=+.6em,
  short center/.initial=.5,
  short/.style={
    to path={
      \pgfextra
        \pgfinterruptpath
          \path (\tikztostart) coordinate (@aux1) -- (\tikztotarget) coordinate (@aux2);
        \endpgfinterruptpath
        \pgfpointdiff{\pgfpointanchor{@aux1}{center}}{\pgfpointanchor{@aux2}{center}}%
        \pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
        \edef\pgfpathlength{\pgfmathresult pt}%
        \pgfcoordinate
          {@@aux1}
          {\pgfpointlineatdistance
            {(\pgfkeysvalueof{/tikz/commutative diagrams/short center})*\pgfpathlength-\pgfkeysvalueof{/tikz/commutative diagrams/short shift <}}
            {\pgfpointanchor{@aux1}{center}}
            {\pgfpointanchor{@aux2}{center}}}%
        \pgfcoordinate
          {@@aux2}
          {\pgfpointlineatdistance
            {(\pgfkeysvalueof{/tikz/commutative diagrams/short center})*\pgfpathlength+\pgfkeysvalueof{/tikz/commutative diagrams/short shift >}}
            {\pgfpointanchor{@aux1}{center}}
            {\pgfpointanchor{@aux2}{center}}}%
      \endpgfextra
        (@@aux1) -- (@@aux2) \tikztonodes}}
}
\makeatother
\begin{document}
\begin{tikzcd}[column sep=large]
 A \rar[][name=X]{X}
   \dar[swap]{F}
   & B \\
 C \urar[dashed][swap]{R}
   \arrow[Rightarrow, to node=X, short]{}{\eta}
\end{tikzcd}
\end{document}

输出 B

在此处输入图片描述

答案2

这是我将在 xypic 中使用的解决方案,我相信您要查找的命令是^在 2 单元格的名称之前写入,并在<2>将其向右移动之前写入。因此这将为您提供相同的图像:

0。

\[\xymatrix@!0@=18mm{
A\ar[d]\ar[r]\xtwocell[d]{}<>{^<-2>a} & B\\
C\ar@{.>}[ur] &
}\]

现在,要获得“正确”的方向,使用 xypic 并不容易,您可能必须添加更多(空)行和列,这样您才有指向的位置。以下是两次添加额外行和额外列的失败尝试。还有一次成功添加额外两行和额外两列的尝试。

1.

\[\xymatrix@!0@=9mm{
A\ar[dd]\ar[rr] \xtwocell[rd]{}<>{^a}&& B\\
&&\\
C\ar@{.>}[uurr] &&
}\]

2.

\[\xymatrix@!0@=9mm{
A\ar[dd]\ar[rr] \xtwocell[rrd]{}<>{^a}&& B\\
&&\\
C\ar@{.>}[uurr] &&
}\]

3.

\[\xymatrix@!0@=4.5mm{
A\ar[dddd]\ar[rrrr] &&&& B\\
\xtwocell[rrd]{}<>{^<-1>a}&&&&\\
&&&&\\
&&&&\\
C\ar@{.>}[uuuurrrr] &&&&
}\]

它们的排列顺序如下。

在 xypic 中绘制三角形的方法还有很多,这里我留下一些我使用的示例。希望它们有用。

\[\vcenter{\hbox{\xymatrix@!0@=18mm{
A\ar[r]\ar@{.>}[rd]\xtwocell[rd]{}<>{<-3>a}&C\ar[d]\\
&B\\
}}}\qquad\vcenter{\hbox{\xymatrix@!0@C=15mm{
A\ar[rd]\ar@{.>}[rr]\xtwocell[rr]{}<>{^<2>a}&&B\\&C\ar[ru]&
}}}\qquad\vcenter{\hbox{\xymatrix@!0@=18mm{
C\ar[d]&A\ar[l]\ar@{.>}[ld]\xtwocell[ld]{}<>{<3>a}\\
B&
}}}\]

它们看起来如何,

相关内容