A biblioteca babel do Tikz não funciona sob certas condições

A biblioteca babel do Tikz não funciona sob certas condições

O uso de uma funcionalidade da biblioteca "quotes" inicialmente me deu um erro.

Mudei o idioma do babel de "brasileiro" para "inglês" e funcionou.

Fui atrás de uma solução e descobri sobre a biblioteca "babel"; usei e funcionou para os casos "normais", mas não dentro da macro que defini.

Basicamente, é assim que as coisas estão funcionando:

  1. inglês + (sem pacote de cotação) = funciona para todos os casos
  2. brasileiro + (pacote sem cotação) = não funciona
  3. inglês + (pacote de cotação) = funciona para todos os casos
  4. brasileiro + (pacote de cotação) = funciona fora das macros, mas não dentro delas.

Exemplo mínimo de trabalho:

\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}

Ele falha quando o idioma "Brasil" está definido, mas funciona quando está definido para inglês.

Responder1

Este problema também se aplica à opção germanpara babel.

A razão é que o argumento do comando \fignão é lido com os catcodes corretos. A tikzbiblioteca babelredefine alguns catcodes para seus valores normais no início de cada tikzpictureambiente, mas o argumento de \figé lido antes de ser aplicado.

A solução é baseada na resposta deExiste alguma maneira de definir um catcode apenas dentro de uma macro?.

O comando \figcomeça com \begingroup. Em seguida, ele define o catcode de ". Somente após a alteração deste código de gato o comando \figauxé executado. No final de \figaux, \endgroupé colocado.

insira a descrição da imagem aqui

\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}

informação relacionada