PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Konflikt zwischen [frencn]babel und circuitikz



Magger
18-09-2014, 07:30
Hallo zusammen,

folgendes einfache Minimalbeispiel lässt sich bei mir nicht kompilieren (101 Fehler).


\documentclass{scrartcl}

\usepackage[french]{babel}
%\usepackage[ngerman]{babel}

\usepackage{circuitikz}

\begin{document}

\begin{tikzpicture}
\draw (0,0) to[short] (0,2);
\end{tikzpicture}

\end{document}

Ich benutze ein (aktuelles) MikTeX 2.9 unter einem (veralteten) Windows XP.

Ich bin mir sicher, dass es vor einem Jahr noch funktioniert hat. Wie kann man das Problem lösen?

Viele Grüße, Mathias

klops
18-09-2014, 08:02
frenchb.ldf macht eine ganze Menge Dinge, die zusammen mit anderen Klassen oder Paketen zu Problemen führen können. Meist genügt es auch nicht, innerhalb des Dokuments die Sprache umzuschalten, um diese Dinge wieder los zu werden. Auch fehlt teilweise die Möglichkeit, diese Dinge innerhalb des Dokuments wieder abzuschalten (in der Präambel geht es teilweise mit \frenchbsetup). Zu diesen unschönen Dingen gehört, dass es catcodes von Zeichen ändert. Hier ein Hack, um das notdürftig zu flicken:
\documentclass{scrartcl}

\usepackage{circuitikz}
\usepackage[french]{babel}
%\usepackage[ngerman]{babel}

\makeatletter
\newcommand*\makefrenchbcharsother{%
\@makeother;\@makeother:\@makeother.\@makeother!\@ makeother?
}
\makeatother

\begin{document}
\begin{tikzpicture}\makefrenchbcharsother
\draw (0,0) to[short] (0,2);
\end{tikzpicture}

\end{document} Besser wäre allerdings, wenn sich der Maintainer von babel-french (http://www.ctan.org/pkg/babel-french) etwas einfallen lassen würde, um das Problem zu lösen.

u_fischer
18-09-2014, 13:13
Also das aktive ! von frenchb ist natürlich der Auslöser des Fehlers. Aber der bug liegt meines Erachtens hier in tikz. Der Code testet explizit den catcode:

\tikz@cc@mid@checks ->\ifnum \the \catcode `\!=\active \relax \expandafter \tik
z@cc@mid@checks@active \else \expandafter \tikz@cc@mid@checks@nonactive \fi

und bricht anschließend zusammen, wenn der Test wahr ergeben hat.

esdd
18-09-2014, 16:33
Lade mal noch die tikzlibrary babel. Bei mir läuft das folgende fehlerfrei:


\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
%\usepackage[ngerman]{babel}

\usepackage{circuitikz}
\usetikzlibrary{babel}

\begin{document}

\begin{tikzpicture}
\draw (0,0) to[short] (0,2);
\end{tikzpicture}

\end{document}

Gruß
Elke

Magger
18-09-2014, 21:21
Danke für alle Antworten. Elkes Lösung ist, denke ich, die beste. Ich dachte auch, ich kenne mich einigermaßen mit TikZ aus, wusste bisher aber auch nicht, dass es eine babel-Bibliothek in TikZ gibt.

Das TikZ-Manual sagt dazu:


Inside a TikZ picture, most symbols need to have the category code 12 (normal text) in order to ensure that
the parser works properly. This is typically not the case when packages like babel are used, which change
catcodes aggressively.
To solve this problem, TikZ provides a small library also called babel (which can, however, also be used
together with any other package that globally changes category codes). What it does is to reset the category
codes at the beginning of every {tikzpicture} and to restore them at the beginning of every node. In
almost all cases, this is exactly would you would expect and need, so I recommend to always load this library
by saying \usetikzlibrary{babel}.

Rhetorische Frage: Wenn es also so empfohlen ist, dieses Paket zu laden, warum passiert dies dann nicht standardmäßig? Nach dieser vermeintlich einfache Lösung, hätte ich mich wieder totgesucht.