Пример (запустите xelatex a.tex -shell-escape
дважды или только xelatex a.tex
если у вас не dot
установлен, а затем вручную изучите сгенерированные файлы):
\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}
Первый и третий графики не отображаются, а соответствующие .dot
файлы недействительны, а второй в порядке. Испорченные файлы
digraph test1 {
vertex[label="v1\penalty \@M \hskip .2em\ignorespaces pos="2,3!"];
}
и
digraph test3 {
vertex[label=\hskip \z@skip ]
}
Правильный файл:
digraph test2 {
vertex[label="v2"
,pos="2,3!"];
}
Похоже, что Polyglossia заменяет некоторые сокращения внутри \digraph
аргумента команды, когда она пытается записать в файл. Скажем, ""
с помощью \hskip \z@skip
. Как мне временно отключить это поведение, чтобы не выполнялась замена сокращений при выполнении \digraph
? Вероятно, будет достаточно некоторых манипуляций с классами символов.
The\digraph
из пакета Graphvizвыглядит довольно простоно у меня недостаточно знаний о внутреннем устройстве TeX и работе с файлами, чтобы иметь представление о том, что делать.
решение1
Вам следует использовать \shorthandoff{"}
до \digraph
(и \shorthandon{"}
после).
Можно пропатчить \digraph
так, чтобы он работал правильно; точнее, нужно пропатчить так, \@digraph
чтобы он вставлялся \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}
Вот содержимое трех файлов после запуска примера:
digraph test1 {
vertex[label="v1",pos="2,3!"];
}
digraph test2 {
vertex[label="v2"
,pos="2,3!"];
}
digraph test3 {
vertex[label=""]
}
Странный способ исправления команды, но он довольно устойчив к другим методам из-за специальных трюков, которые он делает.