.png)
Явный код
\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}