Die Babel-Bibliothek von Tikz funktioniert unter bestimmten Bedingungen nicht

Die Babel-Bibliothek von Tikz funktioniert unter bestimmten Bedingungen nicht

Die Verwendung einer Funktionalität aus der Bibliothek „quotes“ lieferte mir zunächst einen Fehler.

Ich habe die Sprache von Babel von „Brasilianisch“ auf „Englisch“ geändert und es hat funktioniert.

Ich habe nach einer Lösung gesucht und bin auf die Bibliothek „babel“ gestoßen. Ich habe sie verwendet und sie hat in den „normalen“ Fällen funktioniert, aber nicht innerhalb des von mir definierten Makros.

Im Grunde funktioniert es so:

  1. englisch + (kein Zitatpaket) = funktioniert für alle Fälle
  2. brasilianisch + (kein Angebotspaket) = funktioniert nicht
  3. englisch + (Angebotspaket) = funktioniert in allen Fällen
  4. brasilianisch + (Zitatpaket) = funktioniert außerhalb von Makros, aber nicht innerhalb dieser.

Minimales funktionierendes Beispiel:

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

Es schlägt fehl, wenn die Sprache „Brasilien“ eingestellt ist, aber es funktioniert, wenn es auf Englisch eingestellt ist.

Antwort1

Dieses Problem gilt auch für die Option germanfür babel.

Der Grund dafür ist, dass das Argument des Befehls \fignicht mit den richtigen Catcodes gelesen wird. Die tikzBibliothek babelsetzt einige Catcodes zu Beginn jeder tikzpictureUmgebung auf ihre normalen Werte zurück, aber das Argument \figwird gelesen, bevor dies zutrifft.

Die Lösung basiert auf der Antwort vonGibt es eine Möglichkeit, einen Catcode nur innerhalb eines Makros festzulegen?.

Der Befehl \figbeginnt mit \begingroup. Anschließend setzt er den Catcode von ". Erst wenn dieser Catcode geändert wird, \figauxwird der Befehl ausgeführt. Am Ende von \figauxwird \endgroupplatziert.

Bildbeschreibung hier eingeben

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

verwandte Informationen