tikz-cd
我正在尝试使用 XeLaTeX、交换图包、babel
德语包以及exsheets
格式化和组织问题和答案的包来输入数学练习。这是一个最简单的例子:
\documentclass{article}
\usepackage{xltxtra}
\usepackage{exsheets}
\usepackage[ngerman]{babel}
\usepackage{tikz-cd}
\usetikzlibrary{babel}
\begin{document}
\begin{question}
\[
\begin{tikzcd}[ampersand replacement=\&]
A \arrow[r, "f"]
\& B
\end{tikzcd}
\]
\end{question}
\end{document}
我使用\usetikzlibrary{babel}
因为否则ngerman
模块babel
和环境"
中的字符tikzcd
会导致类似的问题这个。我将其用于ampersand replacement=\&
环境tikzcd
,因为question
环境否则会导致类似以下问题这个。
给定的代码导致以下错误:
Argument of \language@active@arg" has an extra }
这与不使用时会出现的错误相同\usetikzlibrary{babel}
,以下三个中的任何一个都可以使代码正常工作:
- 未使用该
babel
包。 - 不使用
question
环境。 "f"
从箭头上取下标签。
所以在我看来,question
环境在某种程度上阻碍了\usetikzlibrary{babel}
工作。我不知道如何解决这个问题,唯一的办法是其他人提到了这个问题我发现有一种针对西班牙语的解决方法。
答案1
我认为,tikz-cd
除了语法之外,该包还应提供箭头标签的键"<label>"
。不幸的是,语法label=f
似乎无法使用tikz-cd
。
这里的问题是,question
环境吸收了文本作为\end{question}
宏的参数(小谎言,实际上,它是一个子环境),因此babel
库无法真正完成其工作。
你有两种可能性。
使用“较旧”的语法
\arrow{r}{f}
将环境的文本括起来
\scantokens
:\documentclass{article} \usepackage[ngerman]{babel} \usepackage{fontspec} \usepackage{exsheets} \usepackage{tikz-cd} \usetikzlibrary{babel} \begin{document} \begin{question} \[ \begin{tikzcd}[ampersand replacement=\&] \scantokens{ A \arrow[r,"f"] \& B } \end{tikzcd} \] \end{question} \end{document}
不要使用xltxtra
,它现在其实没那么有用。