让 tikz-cd 更好地与周围的文本融合

让 tikz-cd 更好地与周围的文本融合

我正在尝试使用 tikz-cd 在文本中编写范畴论映射,例如 Let \begin{tikzcd}[column sep=small] A \arrow[r] & B \end{tikzcd} be a map.,但每当我这样做时,映射和它周围的文本之间都会出现一些不必要的间距,如下所示:

文内地图

这不是什么大问题,直到我不得不写这样的地图图像时Im(\begin{tikzcd}[column sep=small] A \arrow[r] & B \end{tikzcd}),地图和括号之间的空间就变得太明显了,看起来像这样:

地图图片

有什么方法可以让 tikz-cd 地图与其周围的文本更好地融合,而不是在它出现在中间时出现这个奇怪的空间?

答案1

这是一种cramped*设置正确设置的样式sep,以便最终生成的 CDA \to B尽可能地相似。

这意味着:

  • sep内部 TikZ没有s \matrix
  • 没有sep表示细胞节点的 s(箭头上的标签是不同的东西)。
  • outer sep细胞应该\thickmuskip是(≈ \;,周围的填充)的宽度\to,但那里出了问题,因此校正因子为1.25
  • 这是包括填充在内column sep的宽度。\to
  • 圆形线帽(与\to符号相同)。
  • 对边界框没有贡献的箭头。

最后一个在大多数情况下可能是不必要的,对于 CD 来说可能不是一个好主意,但话又说回来,我猜更复杂的箭头在数学模式中看起来不会很好。

代码

\documentclass[varwidth,convert]{standalone}
\usepackage{tikz-cd}
\tikzcdset{
  cramped*/.style={
    arrows=overlay, line cap=round,
    every matrix/.append style={
      every outer matrix/.append style={inner sep=+0pt}},
    every cell/.append style={inner sep=+0pt, outer sep=1.25*width("$\;$")},
    column sep/.evaluated=width("${}\to{}$")}}
\begin{document}
Let $A \to B$ be a map. (\texttt{\textbackslash to})\par
Let \begin{tikzcd}[column sep=small] A \arrow[r] & B \end{tikzcd}
  be a map. (\texttt{column sep=small})\par
Let \begin{tikzcd}[column sep=small, cramped] A \arrow[r] & B \end{tikzcd}
  be a map. (\texttt{column sep=small, cramped})\par
Let $A \to B$ be a map. (\texttt{\textbackslash to})\par
Let \begin{tikzcd}[cramped*] A \arrow[r] & B \end{tikzcd}
be a map. (\texttt{cramped*})\par
Let \begin{tikzcd}[cramped*]
  A \ar[r, bend left] \ar[r, bend right, <-] & B
\end{tikzcd} be a map.\par

\[\sin( \begin{tikzcd}[cramped*]
            A \ar[r, bend left] \ar[r, bend right, <-]
          & B
        \end{tikzcd})\]
\[\sin( \begin{tikzcd}[cramped*] A \rar & B \end{tikzcd})\]
\[\sin(A \to B)\]
\end{document}

输出

在此处输入图片描述

相关内容