mathtools
我将包与 包结合使用,tikz-cd
用上括号装饰箭头标签。但是,\overbracket
在箭头标签内使用 会扰乱 的自动垂直高度调整tikz-cd
。
以上内容来自以下最小工作示例:
\documentclass{standalone}
\usepackage{tikz-cd,mathtools}
\newcommand{\CompB}[1]{\overbracket[.5pt][1pt]{#1}}
\begin{document}
\begin{tikzcd}
\CompB{M} \ar[rr,"{\CompB{f}}" near start]\ar[rr,"\overbracket{f}"]\ar[rr,"f" near end] && N
\\
& M \ar[ul,"b"]\ar[ur,swap,"f"] &
\end{tikzcd}
\end{document}
包括两个标签,用于突出显示问题(并测试问题是否是我对括号的轻微重新定义)。我无法从中得到有用的信息tikz-cd 文档,但我可能忽略了一些东西。
如何正确重新调整箭头标签的高度
\overbracket{f}
?tikz-cd
为什么会发生这种情况?
提前致谢!
答案1
问题在于\overbracket
将内容放入框中,而忘记了外部的样式。因此,您需要捕获外部数学样式并将其放入框中。有几种方法可以做到这一点,最简单的方法可能是使用包scalerel
及其\ThisStyle
和\SavedStyle
命令。
\documentclass{standalone}
\usepackage{tikz-cd,mathtools,scalerel}
\newcommand{\CompB}[1]{\ThisStyle{\overbracket[.5pt][1pt]{\SavedStyle{#1}}}}
\begin{document}
\begin{tikzcd}
\CompB{M} \ar[rr,"{\CompB{f}}"] && N \\
& M \ar[ul,"b"]\ar[ur,swap,"f"] &
\end{tikzcd}
\end{document}
答案2
快速而肮脏的黑客攻击:
\documentclass{standalone}
\usepackage{tikz-cd,mathtools}
\newcommand{\CompB}[1]{\overbracket[.5pt][1pt]{#1}}
\begin{document}
\begin{tikzcd}
\CompB{M} \ar[rr,"\text{$\CompB{f}$}" near start]\ar[rr,"\text{$\overbracket{f}$}"]\ar[rr,"f" near end] && N
\\
& M \ar[ul,"b"]\ar[ur,swap,"f"] &
\end{tikzcd}
\end{document}
答案3
教导\CompB
使用来保留当前的数学风格\mathpalette
。
\documentclass{article}
\usepackage{mathtools}
\usepackage{tikz-cd}
\makeatletter
\NewDocumentCommand{\CompB}{m}{{% the inner braces are important
\mathpalette\CompB@{#1}%
}}
\NewDocumentCommand{\CompB@}{mm}{\overbracket[0.4pt][1pt]{#1#2}}
\makeatletter
\begin{document}
\[
\begin{tikzcd}
\CompB{M} \ar[rr,"\CompB{f}"] && N
\\
& M \ar[ul,"b"]\ar[ur,swap,"f"] &
\end{tikzcd}
\]
\end{document}