Latex 包 Graphviz 和 Babel 冲突

Latex 包 Graphviz 和 Babel 冲突

加载 babel 包时,graphvizgraphviz 代码中不接受双引号。请参阅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 到底是什么。

更新:我找到了一个可行的解决方法:

  1. babel与德语和英语同时使用;
  2. \selectlanguage{english}在输入 graphviz 代码之前使用;
  3. \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}

相关内容