Конфликт между пакетами environ и babel (французский)

Конфликт между пакетами environ и babel (французский)

Явный код

\documentclass{standalone}
\usepackage[french]{babel}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{babel}
\begin{document}
\begin{tikzpicture}
  \begin{semilogxaxis}[
    xmin=1e-1,
    xmax=1e4,
    ymin=0,
    ymax=1
  ]
    \draw[thick,blue,dashed] (axis cs:1,0) -- (axis cs:100,1);
  \end{semilogxaxis}
\end{tikzpicture}
\end{document}

работает, но если я использую новую среду, компиляция невозможна

\documentclass{standalone}
\usepackage{pgfplots,environ}
\usepackage[french]{babel}
\usetikzlibrary{babel}
\pgfplotsset{compat=1.18}
\NewEnviron{MyEnv}[3][]{
  \begin{tikzpicture}
    \begin{semilogxaxis}[
      xmin={#2},
      xmax={#3},
      ymin=0,
      ymax=1
    ]
      \BODY
    \end{semilogxaxis}
  \end{tikzpicture}
}
\begin{document}
\begin{MyEnv}[]{1e-1}{1e4}
    \draw[thick,blue,dashed] (axis cs:1,0) -- (axis cs:100,1);
\end{MyEnv}
\end{document}

Второй пример компилируется правильно, если я закомментирую пакет babel.

Есть идеи, как это исправить? shorthandoffПредложения в ответах на другие похожие вопросы, похоже, здесь не работают.

решение1


EDIT: Лучший способ сделать это — создать список текущих сокращений, а затем отключить их все, см.этот ответ. Отключение сокращений вручную, например, ;может привести к ошибкам, если ;это не сокращение (см. комментарии ниже).


Оригинальный ответ: Как предположил @UlrikeFischer в комментариях,

\AddToHook{env/MyEnv/begin}{\shorthandoff{;}}

для обработки активных символов работает. environПакет использовался для избежания конфликтов с tikz externalбиблиотекой. xparseПакет также может использоваться вместоenviron.

\documentclass{standalone}
\usepackage[french]{babel}
\usepackage{xparse}
\usetikzlibrary{babel,external}
\tikzexternalize[prefix=figure]
\pgfplotsset{compat=1.18}
\AddToHook{env/MyEnv/begin}{\shorthandoff{;}}
\NewDocumentEnvironment{MyEnv}{O{}mm+b}{
    \begin{tikzpicture}
        \begin{semilogxaxis}[xmin={#2},xmax={#3},ymin=0,ymax=1]
            #4
        \end{semilogxaxis}
    \end{tikzpicture}
}{}
\begin{document}
    \begin{MyEnv}[]{1e-1}{1e4}
        \draw[thick,blue,dashed] (axis cs:1,0) -- (axis cs:100,1);
    \end{MyEnv}
\end{document}

Связанный контент