加载 babel 包时,graphviz
graphviz 代码中不接受双引号。请参阅https://www.overleaf.com/13251515ycdczbrgzczy#/51024557/
\documentclass{standalone}
\usepackage{inputenc}
%\usepackage[german]{babel}
\usepackage[pdf]{graphviz}
\begin{document}
\digraph[scale=0.5]{abc}{
b [ shape = none
label = <<table border="0">
<tr><td>b</td></tr>
</table>>];
a -> b -> c;
}
\end{document}
如果删除了 border 属性或者注释掉了 babel 包(如示例代码所示),则可以正确解释此代码。
我想知道是否有解决方法或者 babel 到底是什么。
更新:我找到了一个可行的解决方法:
babel
与德语和英语同时使用;\selectlanguage{english}
在输入 graphviz 代码之前使用;\selectlanguage{german}
代码之后再次。
这个解决方案的缺点是德语变音符号不能用于graphviz
代码标签,因此也许存在一些更好的解决方法。
答案1
您可以重新定义内部\@@digraph
宏,以便它在获取图形的代码之前禁用简写。
\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[pdf]{graphviz}
\makeatletter
\let\saved@@digraph\@@digraph
\def\@@digraph{\@safe@activestrue\saved@@digraph}
\makeatother
\begin{document}
\digraph[scale=0.5]{abc}{
b [ shape = none
label = <<table border="0">
<tr><td>b</td></tr>
</table>>];
a -> b -> c;
}
\end{document}
一个更简洁的替代方案是etoolbox
:
\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[pdf]{graphviz}
\usepackage{etoolbox}
\makeatletter
\pretocmd\@@digraph{\@safe@activestrue}{}{}
\makeatother
\begin{document}
\digraph[scale=0.5]{abc}{
b [ shape = none
label = <<table border="0">
<tr><td>b</td></tr>
</table>>];
a -> b -> c;
}
\end{document}