如何编写类似 xymatrix 的 LaTeX 环境?

如何编写类似 xymatrix 的 LaTeX 环境?

我喜欢使用xymatrix命令绘制交换图。我不喜欢的是,它xymatrix是一个命令,而不是一个环境。微语言的结构xymatrix类似于一些提供数学公式对齐的 LaTeX 环境(arrayalign),在这种情况下使用命令感觉很奇怪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此处的环境:对于演示,这看起来更危险一些。)

在此处输入图片描述

相关内容