我曾经尝试使用类似的东西制作交换图\arrow[r, "A"]
,但一直出现奇怪的错误。我最终发现,如果我从中删除“dutch”,就不会出现错误\usepackage[dutch, english]
。或者,我可以通过使用封闭 tikzcd 环境来使其工作\shorthandoff{"}...\shorthandon{"}
。显然,“dutch”中的某些内容与 中的“ ”的使用相冲突\arrow[r, "A"]
。两个问题。
这里到底有什么冲突?babel 中的 dutch 选项中的“预定义”或其他内容不喜欢在箭头命令中使用“”是什么意思?
有没有更好的解决方案?我能想到的唯一办法就是重新定义 tikzcd 环境,如下所示
\shorthandoff{"}\begin{tikzcd}...\end{tikzcd}\shorthandon{"}
这实际上只是用大毯子包裹了早先不雅的解决方案,所以我并不喜欢它。
如果没有将 tikzcd 包装在 align 环境中(并且没有充分的理由这样做),则加载 tikzlibrary{babel} 可以解决问题。不过,我仍然很好奇 align 在这里到底搞砸了什么。
毕竟,我是一名 MWE。我做过类似的事情。
\documentclass{report}
\usepackage[a4paper]{geometry}
\usepackage{libertine}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[dutch, english]{babel}
\usepackage{mathtools}
\usepackage{tikz}
\usetikzlibrary{cd}
\usetikzlibrary{babel}
\begin{document}
\begin{align*}
\begin{tikzcd}[ampersand replacement = \&]
A \arrow[r, "A"] \& B
\end{tikzcd}
\end{align*}
\end{document}
答案1
首先说一些一般性的话。我们邀请用一个最小的代码示例来提出这个问题,原因如下:
- 问题通常不会提示任何有关实际错误信息的提示;
- 准备 MWE 有时有助于发现错误或找到解决方法;
- 对任何想提供帮助的人来说,这都是善意的。
更具体地说,对于你的帖子,你可能已经二错误来源。一个是由于对荷兰语babel
进行"
激活,另一个是由于tikzcd
在align
环境中使用。
第一个问题的解决方案:\usetikzlibrary{babel}
。
第二个问题的解决方案:在 的主体中使用ampersand replacement=\&
选项 和来标记列分隔符。但也可以使用 和。\&
tikzcd
\shorthandoff{"}
\shorthandon{"}
这是为什么呢?因为align
(和其他amsmath
显示环境) 将内容作为宏的参数吸收,因此tikzcd
无法像通常那样对 执行操作&
。它也无法对 执行操作"
。
如果您通常习惯于在单个方程(或图表)中使用align
或,请改变您的习惯并在这些情况下使用或。它在语义上更合理,更高效,并且避免了一些技巧。此外,间距更好。我想您可以在下面发现间距的差异,这在使用 时过多了。align*
equation
equation*
align*
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[dutch, english]{babel}
\usepackage{mathtools}
\usepackage{tikz-cd}
\usetikzlibrary{babel}
\usepackage{lipsum} % for mock text
\begin{document}
\lipsum[2][1-2]
\begin{equation*}
\begin{tikzcd}
A \arrow[r, "A"] & B
\end{tikzcd}
\end{equation*}
\lipsum[2][1-2]
\shorthandoff{"}\begin{align*}
\begin{tikzcd}[ampersand replacement = \&]
A \arrow[r, "A"] \& B
\end{tikzcd}
\end{align*}\shorthandon{"}%
\lipsum[3]
\end{document}
答案2
我的回答与标签无关,我希望我理解了你的要求。我使用了xy
没有硬尖箭头的包