如何使 xymatrix 相对于逻辑中心居中?

如何使 xymatrix 相对于逻辑中心居中?

我有一个\xymatrix4 行 2 列的 。我想将其水平居中。我用过,\centerline{}但它(当然)只是将 创建的整个框居中\xymatrix

由于我的矩阵条目是文本,其中一个比其他的要宽,因此将整个框居中似乎不太合适。我想将其相对于矩阵的中心而不是相对于生成的框的中心居中。可以吗?

以下是一个例子:

\documentclass{article}
\usepackage[all]{xy}

\begin{document}
    \hrule
    \centerline{\xymatrix{
        \txt{short} \ar[d] \ar[r] & \txt{short} \ar[d] \\
        \txt{long long long long long} \ar[d] \ar[r] & \txt{short} \ar[d] \\
        \txt{short} \ar[r] & \txt{short}
    }}
    \hrule
\end{document}

答案1

恐怕这无法从内部完成\xymatrix,而且需要进行一些计算。

因此,我们加载calc包并计算必须添加的水平间距才能实现您想要的效果:

\usepackage{calc}

\newlength\mylength
\setlength\mylength{(\widthof{long long long long long}-\widthof{short})/2}

然后我们添加一个\hspace*{\mylength}来将其移动\xymatrix到所需的位置。

梅威瑟:

\documentclass{article}
\usepackage[all]{xy}
\usepackage{calc}

\newlength\mylength
\setlength\mylength{(\widthof{long long long long long}-\widthof{short})/2}

\begin{document}
    \hrule
    \centerline{\xymatrix{
        \txt{short} \ar[d] \ar[r] & \txt{short} \ar[d] \\
        \txt{long long long long long} \ar[d] \ar[r] & \txt{short} \ar[d] \\
        \txt{short} \ar[r] & \txt{short}
    }\hspace*{\mylength}}
    \hrule
\end{document} 

输出:

在此处输入图片描述

答案2

\documentclass{article}
\usepackage[all]{xy}

\begin{document}
    \hrule
    \centerline{\xymatrix{%
        \txt{short} \ar[d] \ar[r] & \txt{short} \ar[d] \\
        \txt{\makebox[2em][r]{long long long long long}} \ar[d] \ar[r] & \txt{short} \ar[d] \\
        \txt{short} \ar[r] & \txt{short}
    }}
    \hrule
\end{document}

在此处输入图片描述

相关内容