![xsim、babel 和 tikzcd 发生冲突:引号](https://linux22.com/image/454683/xsim%E3%80%81babel%20%E5%92%8C%20tikzcd%20%E5%8F%91%E7%94%9F%E5%86%B2%E7%AA%81%EF%BC%9A%E5%BC%95%E5%8F%B7.png)
我正在尝试编写一个简单的交换图,A \arrow[r, "f"] & B
但是我无法在 xsim 的练习环境中做到这一点(练习环境与 babel 包、tikz 包和引号的组合不起作用)。
尽管我尝试了所有方法,但我只能缩小问题的范围。你能帮我完成拼图的最后一步吗?
附言:下面我留下了一个简单示例,说明哪些方法有效,哪些方法无效。感谢您的帮助!
\usepackage{xsim}
\usepackage{tikz-cd}
\usepackage[portuguese]{babel}
\usetikzlibrary{babel}
\begin{document}
%With quotation marks, it works outside the exercise environment:
$\begin{tikzcd}
A \arrow[r, "f"] & B
\end{tikzcd}$
%Without quotation marks, it works inside the exercise environment (with ampersand replacement):
\begin{exercise}
$\begin{tikzcd}[ampersand replacement=\&]
A \arrow[r] \& B
\end{tikzcd}$
\end{exercise}
%With quotation marks, it doesn't work inside the exercise environment:
\begin{exercise}
$\begin{tikzcd}[ampersand replacement=\&]
A \arrow[r, "f"] \& B
\end{tikzcd}$
\end{exercise}
\end{document}
答案1
这与
以下是三种解决方案:
使用
use-files
课程选项。这将为每个
exercise
环境写入附加文件(尽管可以选择整理您的文档文件夹),但它允许您同时使用它们,"
就像&
CD 写在文档的正常部分一样。使用
\AtBeginEnvironment{exercise}{\shorthandoff{"}}
到关闭环境
"
中的速记exercise
:\documentclass{article} \usepackage{xsim} \usepackage{tikz-cd} \usepackage[portuguese]{babel} \usetikzlibrary{babel} \AtBeginEnvironment{exercise}{\shorthandoff{"}} \begin{document} \begin{exercise} % Need to use \babelshorthand{"-} instead of "- \begin{tikzcd}[ampersand replacement=\&] A \arrow[r, "f"] \& B \end{tikzcd} \end{exercise} \end{document}
除非您需要在环境中经常使用简写,否则这并不是很糟糕
exercise
。作为替代方案,这里有一个实现不是需要关闭
"
速记,但使用'
而不是"
。这是仅适用于 TikZ-CD 的解决方案,并且它还基本上禁用了参数内部的 TikZ 简写,
'
但不作为标签的一部分(如)。swap
\arrow
'f''
\documentclass{article} \usepackage{xsim} \usepackage{tikz-cd} \usepackage[portuguese]{babel} \usetikzlibrary{babel} \makeatletter \tikzcdset{ every label/.prefix code=% disable ' first char again to allow ' = swap \pgfkeyslet{/handlers/first char syntax/\expandafter\meaning\string'}% \pgfutil@undefined, execute before arrows={% \pgfkeyssetvalue{/handlers/first char syntax/\expandafter\meaning\string'} {\tikzcd@forward@singlequotes}}} \def\tikzcd@forward@singlequotes#1{\tikzcd@forward@@singlequotes#1\pgf@stop} \def\tikzcd@forward@@singlequotes'#1'#2\pgf@stop{% \tikzcd@forward@quotes{"{#1}"#2}} \makeatother \begin{document} \begin{exercise} \begin{tikzcd}[ampersand replacement=\&] A \arrow[r, 'f''] \& B \end{tikzcd} \end{exercise} \end{document}