Ejemplo (ejecútelo xelatex a.tex -shell-escape
dos veces, o simplemente xelatex a.tex
si no lo tiene dot
instalado y luego explore los archivos generados manualmente):
\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}
El primer y tercer gráfico no se representan y .dot
los archivos correspondientes no son válidos, mientras que el segundo está bien. Los archivos dañados son
digraph test1 {
vertex[label="v1\penalty \@M \hskip .2em\ignorespaces pos="2,3!"];
}
y
digraph test3 {
vertex[label=\hskip \z@skip ]
}
Archivo correcto:
digraph test2 {
vertex[label="v2"
,pos="2,3!"];
}
Parece que Polyglossia reemplaza algunas abreviaturas dentro \digraph
del argumento del comando cuando intenta escribir en un archivo. Digamos, ""
con \hskip \z@skip
. ¿Cómo desactivo ese comportamiento temporalmente, para que no se realice ningún reemplazo de taquigrafía al ejecutar \digraph
? Probablemente, alguna manipulación de clases de personajes será suficiente.
El \digraph
comando del paquete Graphvizparece bastante sencillopero no tengo suficiente conocimiento de los aspectos internos de TeX y el manejo de archivos para tener idea de qué hacer.
Respuesta1
Debes usarlo \shorthandoff{"}
antes \digraph
(y \shorthandon{"}
después).
Es posible parchear \digraph
para que haga lo correcto; más precisamente, es necesario parchear \@digraph
para insertar \shorthandoff{"}
después \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}
Aquí está el contenido de los tres archivos después de ejecutar el ejemplo:
digraph test1 {
vertex[label="v1",pos="2,3!"];
}
digraph test2 {
vertex[label="v2"
,pos="2,3!"];
}
digraph test3 {
vertex[label=""]
}
Una forma extraña de parchear el comando, pero es bastante resistente a otros métodos debido a los trucos especiales que realiza.