Библиотека Tikz Babel не работает при определенных условиях

Библиотека Tikz Babel не работает при определенных условиях

Использование функционала из библиотеки «quotes» изначально приводило к ошибке.

Я изменил язык Babel с «бразильского» на «английского», и это сработало.

Я занялся исправлением и узнал о библиотеке «babel», использовал ее, и она работала в «нормальных» случаях, но не внутри определенного мной макроса.

В принципе, вот как все работает:

  1. английский + (пакет без цитаты) = подходит для всех случаев
  2. бразильский + (пакет без кавычек) = не работает
  3. английский + (пакет цитат) = работает во всех случаях
  4. бразильский + (пакет цитат) = работает вне макросов, но не внутри них.

Минимальный рабочий пример:

\documentclass[brazil]{standalone}
\usepackage{tikz,babel}
\usetikzlibrary{babel,angles,quotes}

\newcommand\fig[1]%
{\begin{tikzpicture}#1\end{tikzpicture}}%

\begin{document}

\fig{\coordinate (a) at (3.75,3.75);
  \coordinate (b) at (3.75,0.75);
  \coordinate (lo) at (0, 0.75);
  \draw[thick,blue] (0, 0.75) -- (3.75, 3.75);
  \pic [draw, -,thick,"$\theta$", angle radius=1cm, angle eccentricity=1.3] {angle = a--lo--b};}

\end{document}

Не работает, если установлен язык «Бразилия», но работает, если установлен английский.

решение1

germanЭта проблема также актуальна для варианта babel.

Причина в том, что аргумент команды \figне считывается с правильными catcodes. tikzБиблиотека babelсбрасывает некоторые catcodes до их нормальных значений в начале каждой tikzpictureсреды, но аргумент \figсчитывается до того, как это применяется.

Решение основано на ответе изЕсть ли способ установить catcode только внутри макроса?.

Команда \figначинается с \begingroup. Затем она устанавливает catcode для ". Только после изменения этого catcode команда \figauxвыполняется. В конце ставится \figaux.\endgroup

введите описание изображения здесь

\documentclass[brazil]{standalone}
\usepackage{tikz,babel}
\usetikzlibrary{babel,angles,quotes}
\newcommand{\fig}{\begingroup\catcode`"=12 \figaux}
\newcommand{\figaux}[1]{\begin{tikzpicture}#1\end{tikzpicture}\endgroup}
\begin{document}
\fig{\coordinate (a) at (3.75,3.75);
  \coordinate (b) at (3.75,0.75);
  \coordinate (lo) at (0, 0.75);
  \draw[thick,blue] (0, 0.75) -- (3.75, 3.75);
  \pic [draw, -,thick,"$\theta$", angle radius=1cm, angle eccentricity=1.3] {angle = a--lo--b};}
\end{document}

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