xsim、babel 和 tikzcd 发生冲突:引号

xsim、babel 和 tikzcd 发生冲突:引号

我正在尝试编写一个简单的交换图,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

这与

以下是三种解决方案:

  1. 使用use-files课程选项

    这将为每个exercise环境写入附加文件(尽管可以选择整理您的文档文件夹),但它允许您同时使用它们,"就像&CD 写在文档的正常部分一样。

  2. 使用

    \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

  3. 作为替代方案,这里有一个实现不是需要关闭"速记,但使用'而不是"

    这是仅适用于 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}
    

    在此处输入图片描述

相关内容