我喜欢使用xymatrix
命令绘制交换图。我不喜欢的是,它xymatrix
是一个命令,而不是一个环境。微语言的结构xymatrix
类似于一些提供数学公式对齐的 LaTeX 环境(array
等align
),在这种情况下使用命令感觉很奇怪xymatrix
。
我想定义一个行为与xymatrix
命令完全相同的环境,但是我对 TeX 了解不够多,无法做到这一点,所以我的天真的尝试失败了。
您能写出这样的环境吗,或者指出我的问题的解决方案?
答案1
您可以使用b
参数类型来\NewDocumentEnviornment
获取所有内容,然后传递给\xymatrix
。例如
\documentclass{article}
\usepackage[all,cmtip]{xy}
\NewDocumentEnvironment{xyenv}{ob}{
\IfNoValueTF{#1}{\xymatrix{#2}}{\xymatrix@#1{#2}}%
}{}
\begin{document}
\xymatrix{
U \ar@/_/[ddr]_y \ar@/^/[drr]^x
\ar@{.>}[dr]|-{(x,y)} \\
& X \times_Z Y \ar[d]^q \ar[r]_p
& X \ar[d]_f \\
& Y \ar[r]^g & Z }
\begin{xyenv}
U \ar@/_/[ddr]_y \ar@/^/[drr]^x
\ar@{.>}[dr]|-{(x,y)} \\
& X \times_Z Y \ar[d]^q \ar[r]_p
& X \ar[d]_f \\
& Y \ar[r]^g & Z
\end{xyenv}
\xymatrix@C+1em{
U \ar@/_/[ddr]_y \ar@/^/[drr]^x
\ar@{.>}[dr]|-{(x,y)} \\
& X \times_Z Y \ar[d]^q \ar[r]_p
& X \ar[d]_f \\
& Y \ar[r]^g & Z }
\begin{xyenv}[C+1em]
U \ar@/_/[ddr]_y \ar@/^/[drr]^x
\ar@{.>}[dr]|-{(x,y)} \\
& X \times_Z Y \ar[d]^q \ar[r]_p
& X \ar[d]_f \\
& Y \ar[r]^g & Z
\end{xyenv}
\end{document}
(在实际使用中,我可能会介意用\xymatrix
一些内部名称进行保存,然后创建一个名为xymatrix
此处的环境:对于演示,这看起来更危险一些。)