Beispiel ( xelatex a.tex -shell-escape
zweimal ausführen oder nur, xelatex a.tex
wenn Sie es nicht dot
installiert haben, und dann die generierten Dateien manuell erkunden):
\documentclass{article}
\usepackage[pdf]{graphviz}
\usepackage{polyglossia}
\setdefaultlanguage[babelshorthands=true]{russian}
\setmainfont{CMU Serif} % Fonts are loaded to avoid compilation errors
\setmonofont{CMU Typewriter Text}
\begin{document}
\digraph{test1}{
vertex[label="v1",pos="2,3!"];
}
\digraph{test2}{
vertex[label="v2"
,pos="2,3!"];
}
\digraph{test3}{
vertex[label=""]
}
\end{document}
Das erste und dritte Diagramm werden nicht gerendert und die entsprechenden .dot
Dateien sind ungültig, während das zweite in Ordnung ist. Ungültige Dateien sind
digraph test1 {
vertex[label="v1\penalty \@M \hskip .2em\ignorespaces pos="2,3!"];
}
Und
digraph test3 {
vertex[label=\hskip \z@skip ]
}
Richtige Datei:
digraph test2 {
vertex[label="v2"
,pos="2,3!"];
}
Es sieht so aus, als ob Polyglossia einige Abkürzungen im \digraph
Argument des Befehls ersetzt, wenn versucht wird, in eine Datei zu schreiben. Sagen wir, ""
mit \hskip \z@skip
. Wie deaktiviere ich dieses Verhalten vorübergehend, sodass beim Ausführen von kein Ersetzen der Abkürzungen durchgeführt wird \digraph
? Wahrscheinlich reichen einige Manipulationen der Zeichenklassen aus.
Der \digraph
Befehl aus dem Graphviz-Paketsieht ziemlich unkompliziert ausaber ich verstehe nicht genug von den internen Vorgängen und der Dateiverwaltung von TeX, um zu wissen, was zu tun ist.
Antwort1
Sie sollten es \shorthandoff{"}
vorher \digraph
(und \shorthandon{"}
danach) verwenden.
Es ist möglich, einen Patch durchzuführen, \digraph
damit das Richtige passiert; genauer gesagt muss ein Patch durchgeführt werden, um nach \@digraph
einzufügen .\shorthandoff{"}
\begingroup
\documentclass{article}
\usepackage[pdf]{graphviz}
\usepackage{polyglossia}
\setdefaultlanguage[babelshorthands=true]{russian}
\setmainfont{CMU Serif} % Fonts are loaded to avoid compilation errors
\setmonofont{CMU Typewriter Text}
\makeatletter
\begingroup
\def\temp\begingroup#1\@nil{%
\endgroup\def\@digraph{\begingroup\shorthandoff{"}#1}%
}
\expandafter\temp\@digraph\@nil
\makeatother
\begin{document}
\digraph{test1}{
vertex[label="v1",pos="2,3!"];
}
\digraph{test2}{
vertex[label="v2"
,pos="2,3!"];
}
\digraph{test3}{
vertex[label=""]
}
\end{document}
Hier ist der Inhalt der drei Dateien nach dem Ausführen des Beispiels:
digraph test1 {
vertex[label="v1",pos="2,3!"];
}
digraph test2 {
vertex[label="v2"
,pos="2,3!"];
}
digraph test3 {
vertex[label=""]
}
Eine seltsame Art, den Befehl zu patchen, aber aufgrund der speziellen Tricks, die er ausführt, ist er ziemlich resistent gegenüber anderen Methoden.