von Gast » Do 22. Feb 2018, 08:03
Das Problem ist, dass \MyAngle die Argumente bereits liest und in Token umwandelt. Damit ist das durch
babel aktive " bereits gelesen und verarbeitet, wenn die tikzpicture-Umgebung zum Zuge kommt. Die babel-Library kann also bezüglich der "-Auswertung nichts mehr ausrichten. Dasselbe Problem gibt es auch, wenn man tikzpicture in diversen anderen Umgebungen verwendet, beispielsweise:
\parbox{\textwidth}
{
\begin{tikzpicture}
\draw (3,0) coordinate (A)
-- (0,1) coordinate (B)
-- (1,2) coordinate (C)
pic[draw, "$\alpha$"] {angle};
\end{tikzpicture}
}
Man könnte jetzt natürlich folgendes machen:
\shorthandoff{"}
\MyAngle
{
\draw (3,0) coordinate (A)
-- (0,1) coordinate (B)
-- (1,2) coordinate (C)
pic[draw, "$\alpha$"] {angle};
}
\shorthandon{"}
Das ist aber zugegeben nicht schön. Die nächste Idee wäre, das shorthand in der Definition von \MyAngle abzuschalten. Aber wenn die Definition expandiert wird, sind die Token ja bereits gebildet (siehe oben). Also ist das zu spät. Man kann aber mit einem Trick arbeiten, indem man \MyAngle in zwei Makros aufteilt, bei denen das erste das shorthand abschaltet und erst das zweite das Argument liest:
\documentclass [DIV=9,fontsize=8pt,paper=a5,parskip=half]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{angles,quotes,babel}
\newcommand{\MyAngle}{%
\begingroup
\shorthandoff{"}%
\MyAngleii
}
\newcommand{\MyAngleii}[1]
{
\begin{tikzpicture}
#1
\end{tikzpicture}%
\endgroup
}
\begin{document}
Funktionierendes Beispiel aus Pgfmanual Kapitel 18.2.1:
\begin{tikzpicture}
\draw (3,0) coordinate (A)
-- (0,1) coordinate (B)
-- (1,2) coordinate (C)
pic[draw, "$\alpha$"] {angle};
\end{tikzpicture}
Dasselbe Beispiel, mit \verb|\newcommand| aufgerufen, funktioniert:
\MyAngle
{
\draw (3,0) coordinate (A)
-- (0,1) coordinate (B)
-- (1,2) coordinate (C)
pic[draw, "$\alpha$"] {angle};
}
M"utterchen jetzt geht es!
\end{document}
Den letzten Satz habe ich eingefügt, um zu demonstrieren, dass \begingroup…\endgroup die Wirkung von \shorthandoff ebenfalls begrenzt, man also kein explizites \shorthandon benötigt.
—
Wer mehr auf den Namen des Verfassers gibt als auf den Inhalt eines Beitrags ist selbst schuld.
Das Problem ist, dass [tt]\MyAngle[/tt] die Argumente bereits liest und in Token umwandelt. Damit ist das durch [p]babel[/p] aktive [tt]"[/tt] bereits gelesen und verarbeitet, wenn die [tt]tikzpicture[/tt]-Umgebung zum Zuge kommt. Die [tt]babel[/tt]-Library kann also bezüglich der [tt]"[/tt]-Auswertung nichts mehr ausrichten. Dasselbe Problem gibt es auch, wenn man [tt]tikzpicture[/tt] in diversen anderen Umgebungen verwendet, beispielsweise: [code]\parbox{\textwidth}
{
\begin{tikzpicture}
\draw (3,0) coordinate (A)
-- (0,1) coordinate (B)
-- (1,2) coordinate (C)
pic[draw, "$\alpha$"] {angle};
\end{tikzpicture}
}[/code]
Man könnte jetzt natürlich folgendes machen: [code]\shorthandoff{"}
\MyAngle
{
\draw (3,0) coordinate (A)
-- (0,1) coordinate (B)
-- (1,2) coordinate (C)
pic[draw, "$\alpha$"] {angle};
}
\shorthandon{"}[/code]
Das ist aber zugegeben nicht schön. Die nächste Idee wäre, das shorthand in der Definition von [tt]\MyAngle[/tt] abzuschalten. Aber wenn die Definition expandiert wird, sind die Token ja bereits gebildet (siehe oben). Also ist das zu spät. Man kann aber mit einem Trick arbeiten, indem man [tt]\MyAngle[/tt] in zwei Makros aufteilt, bei denen das erste das shorthand abschaltet und erst das zweite das Argument liest: [code]\documentclass [DIV=9,fontsize=8pt,paper=a5,parskip=half]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{angles,quotes,babel}
\newcommand{\MyAngle}{%
\begingroup
\shorthandoff{"}%
\MyAngleii
}
\newcommand{\MyAngleii}[1]
{
\begin{tikzpicture}
#1
\end{tikzpicture}%
\endgroup
}
\begin{document}
Funktionierendes Beispiel aus Pgfmanual Kapitel 18.2.1:
\begin{tikzpicture}
\draw (3,0) coordinate (A)
-- (0,1) coordinate (B)
-- (1,2) coordinate (C)
pic[draw, "$\alpha$"] {angle};
\end{tikzpicture}
Dasselbe Beispiel, mit \verb|\newcommand| aufgerufen, funktioniert:
\MyAngle
{
\draw (3,0) coordinate (A)
-- (0,1) coordinate (B)
-- (1,2) coordinate (C)
pic[draw, "$\alpha$"] {angle};
}
M"utterchen jetzt geht es!
\end{document}[/code]
Den letzten Satz habe ich eingefügt, um zu demonstrieren, dass [tt]\begingroup[/tt]…[tt]\endgroup[/tt] die Wirkung von [tt]\shorthandoff[/tt] ebenfalls begrenzt, man also kein explizites [tt]\shorthandon[/tt] benötigt.
—
[size=59]Wer mehr auf den Namen des Verfassers gibt als auf den Inhalt eines Beitrags ist selbst schuld.[/size]