例 ( xelatex a.tex -shell-escape
2 回実行するか、インストールされて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}
1番目と3番目のグラフはレンダリングされず、対応する.dot
ファイルは無効ですが、2番目のグラフは正常です。破損したファイルは
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!"];
}
\digraph
Polyglossia は、ファイルに書き込もうとするときに、コマンドの引数内の一部の省略形を置き換えるようです。たとえば、""
の場合です\hskip \z@skip
。 の実行時に省略形の置き換えが行われないように、この動作を一時的に無効にするにはどうすれば\digraph
よいでしょうか。おそらく、いくつかの文字クラス操作で十分でしょう。
\digraph
Graphvizパッケージからのコマンドかなり簡単そうに見えるしかし、TeX の内部とファイル処理について十分な理解がないため、何をすべきかわかりません。
答え1
\shorthandoff{"}
before \digraph
(およびafter)を使用する必要があります\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}
例を実行した後の 3 つのファイルの内容は次のとおりです。
digraph test1 {
vertex[label="v1",pos="2,3!"];
}
digraph test2 {
vertex[label="v2"
,pos="2,3!"];
}
digraph test3 {
vertex[label=""]
}
コマンドを修正する奇妙な方法ですが、特別なトリックを実行するため、他の方法に比べてかなり耐性があります。