Ausgehend von den Kommentaren unter der Antwort zu dieser Frage, habe ich das Beispiel wie folgt zum laufen gebracht:

Open in writeLaTeX
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{angles,quotes,babel}

\begin{document}
\begin{frame}[fragile=singleslide]
\begin{tikzpicture}
\draw (2,-2) coordinate (A) -- (0,0) coordinate (B) -- (2,2) coordinate (C);
\pic["$\ldotp$",draw] {angle};
\end{tikzpicture}
\end{frame}
\end{document}

Nun möchte ich das Bild in eine \scalebox packen.

Open in writeLaTeX
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{angles,quotes,babel}

\begin{document}
\begin{frame}[fragile=singleslide]
\scalebox{2}{%
\begin{tikzpicture}
\draw (2,-2) coordinate (A) -- (0,0) coordinate (B) -- (2,2) coordinate (C);
\pic["$\ldotp$",draw] {angle};
\end{tikzpicture}%
}
\end{frame}
\end{document}

Dieser Code lässt sich nicht übersetzen:

Argument of language@active@arg" has an extra }. }

Es scheint auch hier an den Anführungszeichen zu liegen.

Eine Möglichkeit ist es, auf quotes zu verzichten und pic text={$\ldotp$} zu verwenden. Gibt es auch eine Möglichkeit, die Sache mit quotes zum Laufen zu bringen?

gefragt 22 Jan '15, 18:25

tom75's gravatar image

tom75
2.2k187884
Akzeptiert-Rate: 57%

bearbeitet 22 Jan '15, 18:27

Ganz tolle Frage. Das steckt eine Grundeigenschaft von TeX selbst dahinter, die auch von Paketautoren nicht immer verstanden wird und u. a. auch dafür verantwortlich ist, warum beamer überhaupt Option fragile für bestimmte Arten von frame-Umgebungen benötigt, warum \verb in einem Argument oft nicht funktioniert, warum \url in einem Argument starken Einschränkungen unterworfen ist, warum das Paket ngerman besser nicht verwendet werden sollten u. v. m.

(22 Jan '15, 18:48) saputello

In dem Fall ist das \catcode-Problem doppelt. Zu dem bekannten Problem innerhalb einer frame-Umgebung kommt noch: Die Token der Argumente eines Befehls (im Beispiel \scalebox) haben den \catcode, den sie beim Lesen des Arguments bekommen haben. Beim Lesen des Argument werden sie nicht ausgeführt, so dass die tikzpicture-Umgebung innerhalb des Arguments den \catcode von " nicht mehr ändern kann. Es gibt nun zwei Möglichkeiten, das Problem zu lösen:

Open in writeLaTeX
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{angles,quotes,babel}

\newsavebox\tikzsavebox

\begin{document}

\begin{lrbox}{\tikzsavebox}
\begin{tikzpicture}
\draw (2,-2) coordinate (A) -- (0,0) coordinate (B) -- (2,2) coordinate (C);
\pic["$\ldotp$",draw] {angle};
\end{tikzpicture}%
\end{lrbox}
\begin{frame}
\scalebox{2}{\usebox{\tikzsavebox}}
\end{frame}
\end{document}

Wie Du siehst, braucht man hier nicht einmal mehr fragile. Die andere Möglichkeit besteht wieder darin, das babel shorthand " zu deaktivieren, bevor das Argument gelesen wird:

Open in writeLaTeX
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{angles,quotes,babel}

\begin{document}
\begin{frame}[fragile=singleslide]
\shorthandoff{"}
\scalebox{2}{%
\begin{tikzpicture}
\draw (2,-2) coordinate (A) -- (0,0) coordinate (B) -- (2,2) coordinate (C);
\pic["$\ldotp$",draw] {angle};
\end{tikzpicture}%
}
\end{frame}
\end{document}

Was Dir besser gefällt, musst Du selbst entscheiden. Die lrbox-Variante ist universeller und dürfte auch für andere Zeichen funktionieren, die TikZ in einem ganz bestimmen \catcode benötigt. lrbox ist übrigens im usrguide dokumentiert.

Permanenter link

beantwortet 22 Jan '15, 18:37

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 22 Jan '15, 19:49

@saputello Vielen Dank, das ist super erklärt!

(22 Jan '15, 21:35) tom75

Der Vollständigkeithalber kommt hier noch der Vorschlag, einfach auf die quotes Syntax zu verzichten, d.h. "$\ldotp$" durch pic text=\ldotp zu ersetzen.

Open in Online-Editor
\documentclass[12pt]{beamer}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{
  angles,
  %quotes,babel% werden nur benötigt, wenn quotes Syntax verwendet wird
}

\begin{document}
\begin{frame}
\scalebox{2}{%
\begin{tikzpicture}
\draw (2,-2) coordinate (A) -- (0,0) coordinate (B) -- (2,2) coordinate (C);
\pic[pic text=$\ldotp$,draw] {angle};
\end{tikzpicture}%
}
\end{frame}
\end{document}
Permanenter link

beantwortet 01 Feb '15, 18:36

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×728
×138
×4
×1

gestellte Frage: 22 Jan '15, 18:25

Frage wurde gesehen: 9,657 Mal

zuletzt geändert: 01 Feb '15, 18:36