Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Konflikt zwischen [frencn]babel und circuitikz

  1. #1
    Registrierter Benutzer
    Registriert seit
    24.04.2009
    Beiträge
    223

    Konflikt zwischen [frencn]babel und circuitikz

    Hallo zusammen,

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

    Code:
    \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

  2. #2
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    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:
    Code:
    \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 etwas einfallen lassen würde, um das Problem zu lösen.

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    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.

  4. #4
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Lade mal noch die tikzlibrary babel. Bei mir läuft das folgende fehlerfrei:

    Code:
    \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

  5. #5
    Registrierter Benutzer
    Registriert seit
    24.04.2009
    Beiträge
    223
    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.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •