我的代码的以下部分无法编译
\usepackage[all,2cell]{xy}
\begin{document}
\UseTwocells
\xymatrix
{ B & {} & {} & C\llltwocell}
\end{document}
有趣的是:
\usepackage[all,2cell]{xy}
\begin{document}
\UseTwocells
\xymatrix
{ B & {} & {} & C\lltwocell}
\end{document}
编译得很好。如您所见,差异在于“twocell”命令前面的 l 字母的数量。您能告诉我如何修复它吗?
答案1
您的问题本来可以更清楚一些,但通过比较\ltwocell
,\lltwocell
我假设您想要:
\documentclass{article}
\usepackage[all,2cell]{xy}
\begin{document}
\UseTwocells
\typeout{\meaning\ltwocell}
\typeout{\meaning\lltwocell}
\typeout{\meaning\llltwocell}
\makeatletter
\def\llltwocell{\supermorphism {\xy@ {start of 2-cell}{\begingroup }\twocell@ }[0,-3]{}}
\makeatother
\xymatrix
{ B & {} & {} & C\llltwocell}
\end{document}
三种输出结果:
macro:->\supermorphism {\xy@ {start of 2-cell}{\begingroup }\twocell@ }[0,-1]{}
macro:->\supermorphism {\xy@ {start of 2-cell}{\begingroup }\twocell@ }[0,-2]{}
undefined
答案2
解决方案是tikz-cd
。您只需column sep
根据需要调整 即可。如果您愿意,您可以像我一样指定弯曲半径,以使两个弧具有相同的高度。
% arara: pdflatex
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\[
\begin{tikzcd}
B & C \ar[bend right, ""name=U]{l} \ar[bend left, ""{name=L, above}]{l}
\ar[Rightarrow, from=L, to=U]
\end{tikzcd}\vee
\begin{tikzcd}[column sep=20ex]
B & C \ar[bend right=14, ""name=U]{l} \ar[bend left=14, ""{name=L, above}]{l}
\ar[Rightarrow, from=L, to=U]
\end{tikzcd}
\]
\end{document}
答案3
这是一个老问题,但我有一个答案,它保留在 xypic 包中,不需要定义任何新命令。
我不知道为什么\llltwocell
不允许。你必须使用命令\xtwocell
虽然我不知道为什么语法是这样的,因为我很久以前就发现了它,并且可能是通过反复试验,你可以写:
\documentclass{article}
\usepackage[all,2cell]{xy}
\UseTwocells
\begin{document}
\[
\xymatrix{
B&&&C\xtwocell[lll]{}{\alpha}
}
\]
\end{document}
因此,如果您只想要单元格而不是箭头,您可以写入\xtwocell[lll]{}<>{\alpha}
,或者\xtwocell[lll]{}<\omit>{\alpha}
这些对我来说同样有效,没有任何问题。