50 如何排版这样的"交换图"的纵向可延伸双向箭头「\rightleftharpoons」?

发布于 2026-10-24 23:34:55

如题,这是预期的目标效果:

image.png

其中的关键是这里「被延展过的垂直\rightleftharpoons」,可以考虑如下的简化MWE:

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{graphicx}
\DeclareMathOperator{\Inv}{Inv}
\DeclareMathOperator{\Gal}{Gal}
\begin{document}

\begin{equation*}
\begin{array}{*{3}{c}}
    \Inv{H_2} & & \Inv{H_1}
    \\[1mm]
    \rotatebox{90}{$=$} & & \rotatebox{90}{$=$}
    \\[1mm]
    E_2 & \supseteq & E_1
    \\[2mm]
    \rotatebox[origin=c]{90}{$\rightleftharpoons$} & & \Big\updownarrow
    \\[2mm]
    H_2 & \subseteq & H_1
    \\[1mm]
    \rotatebox{90}{$=$} & & \rotatebox{90}{$=$}
    \\[1mm]
    \Gal(K/E_2) & & \Gal(K/E_1)
\end{array}
\end{equation*}

\end{document}

image.png

查看更多

关注者
0
被浏览
75
2 个回答
Absinthe
Absinthe 16小时前
这家伙很懒,什么也没写!

tikz-cd 方案

image.png

此事在 tikz-cd 手册中已有记载
image.png
使用 xshift 做一些平移就可得到完整的图形,其中还有一些技巧,例如 phantom 在手册有专门的小节介绍
image.png

完整代码如下:

\documentclass{standalone}
\usepackage{tikz-cd}
\NewDocumentCommand{\Inv}{}{\mathrm{Inv}}
\NewDocumentCommand{\Gal}{}{\mathrm{Gal}}
\begin{document}
\begin{tikzcd}
  & \Inv \{e\} \rar[phantom]{\cdots} \dar[equal]
    & \Inv H_{2} \dar[equal]
      & \Inv H_{1} \rar[phantom]{\cdots} \dar[equal]
        & \Inv G \dar[equal]\\
\Sigma \rar[phantom]{:} \dar[rightharpoonup,xshift=2]{\Gal}
  & K \rar[phantom]{\supseteq \; \cdots \; \supseteq}
      \dar[leftrightarrow]
    & E_{2} \ar[phantom]{r}{\supseteq}
      \dar[leftrightarrow]
      & E_{1} \rar[phantom]{\supseteq \; \cdots \; \supseteq}
              \dar[leftrightarrow]
        & F \dar[leftrightarrow] \\
\Gamma \rar[phantom]{:} \uar[rightharpoonup,xshift=-2]{\Inv}
  & \{e\} \rar[phantom]{\subseteq \; \cdots \; \subseteq}
          \dar[equal]
    & H_{2} \rar[phantom]{\subseteq}
            \dar[equal]
      & H_{1} \rar[phantom]{\subseteq \; \cdots \; \subseteq}
              \dar[equal]
        & G \dar[equal] \\
  & \Gal (K / K) \rar[phantom]{\cdots}
    & \Gal (K / E_{2})
      & \Gal (K / E_{1}) \rar[phantom]{\cdots}
        & \Gal (K / F) \\
\end{tikzcd}
\end{document}
Sagittarius Rover
Sagittarius Rover 46分钟前
这家伙很懒,什么也没写!

这是一个半成品,但我不打算继续下去了,有以下几个缺陷:

  • 借助chemarr提供的\xrightleftharpoons箭头并非良策
  • 上下的字符区域和箭头的距离不完全相同,修改很困难,参见这里
  • 需要反复借助\rotatebox[origin=c]{90}{...}
  • 左右间距调整纯靠随缘\;以及\,并不准确,且难以和\Big\updownarrow做到精确同高
  • 红温😡
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{graphicx}
\DeclareMathOperator{\Inv}{Inv}
\DeclareMathOperator{\Gal}{Gal}
\usepackage{chemarr}%<---
\usepackage{lua-visual-debug}
\begin{document}

$X \xrightleftharpoons[o]{o} Y$

$X \xrightleftharpoons[{\;ooo}]{{ooo\;}} Y$

$X \xrightleftharpoons[{\rotatebox[origin=c]{-90}{$\Gal$}}]{{\rotatebox[origin=c]{-90}{$\,\Inv\,$}}} Y$

$X \xrightleftharpoons[\quad{\rotatebox[origin=c]{-90}{$\,\Gal\,$}}\quad]{\quad{\rotatebox[origin=c]{-90}{$\,\Inv\,$}}\quad} Y$

\bigskip

$X \rotatebox[origin=c]{90}{\xrightleftharpoons[\quad{\rotatebox[origin=c]{-90}{$\,\Gal\,$}}\quad]{\quad{\rotatebox[origin=c]{-90}{$\,\Inv\,$}}\quad}} Y$

\end{document}

image.png

下面是完整的半成品代码:

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{graphicx}
\DeclareMathOperator{\Inv}{Inv}
\DeclareMathOperator{\Gal}{Gal}
\usepackage{chemarr}%<---

\begin{document}

\begin{equation*}
\begin{array}{*{3}{c}}
    \Inv{H_2} & & \Inv{H_1}
    \\[1mm]
    \rotatebox{90}{$=$} & & \rotatebox{90}{$=$}
    \\[1mm]
    E_2 & \supseteq & E_1
    \\[2mm]
    \;\rotatebox[origin=c]{90}{$\xrightleftharpoons[\;\,{\rotatebox[origin=c]{-90}{$\;\Gal\;$}}\,\;]{{\rotatebox[origin=c]{-90}{$\;\Inv\;$}}}$} & & \Big\updownarrow
    \\[2mm]
    H_2 & \subseteq & H_1
    \\[1mm]
    \rotatebox{90}{$=$} & & \rotatebox{90}{$=$}
    \\[1mm]
    \Gal(K/E_2) & & \Gal(K/E_1)
\end{array}
\end{equation*}

\end{document}

image.png

最佳实践还应当是tikzcd...有更准确的位置设置和箭头支持:-[

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览