![让 tikz-cd 更好地与周围的文本融合](https://linux22.com/image/437725/%E8%AE%A9%20tikz-cd%20%E6%9B%B4%E5%A5%BD%E5%9C%B0%E4%B8%8E%E5%91%A8%E5%9B%B4%E7%9A%84%E6%96%87%E6%9C%AC%E8%9E%8D%E5%90%88.png)
我正在尝试使用 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}