ltxdoc 和 tikz 矩阵之间的交互存在问题

ltxdoc 和 tikz 矩阵之间的交互存在问题

我花了一些时间尝试解决 TikZ 矩阵和文档类之间的交互问题ltxdoc。使用时ltxdoc,我无法使用|[options]|单元格开头的语法来更改中特定节点的属性matrix of nodes。此功能记录在 TikZ 手册第 375 页。

以下代码片段提供了重现该问题的最小示例。

\documentclass[a4paper]{ltxdoc}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
  \matrix[matrix of nodes, nodes in empty cells]{
     % if |[red]| is removed, or the documentclass is
     % changed to article, it works all right
     first & |[red]| second & third \\
  };
\end{tikzpicture}
\end{document}

编译失败并显示以下消息:

! Argument of \tikz@lib@matrix@with@options has an extra }.

如果我更改documentclass(例如,更改为article)或删除|[red]|部分,一切都会正常工作。我广泛使用此功能,在切换到之前,我没有遇到任何问题ltxdoc

我检查了 中的内容tikzlibrarymatrix.code.tex,但那里一切似乎都正常。我使用的是TikZ 2.10ltxdoc版本。2007/11/11 v2.0u

答案1

正如@wh1t3所说,ltxdoc问题出现\AtBeginDocument{\MakeShortVerb{\|}}在其序言中。该类文档声明如下:

使其|成为“短动词”字符,但不位于文档序言中,因为活动字符可能会干扰已加载的包。

加载后立即doc包裹- 定义\MakeShortVerb。解决这个问题最简单的方法是发出

\AtBeginDocument{\DeleteShortVerb{\|}}% | -> catcode "other"

其效果实际上与

\AtBeginDocument{\catcode`\|=12}% | -> catcode "other"

在您的序言中。这将延迟执行直到(文档序言之外)并反转/覆盖文档类设置\begin{document}的定义。当然,如果您愿意,您也可以在之后执行。\MakeShortVerb{\|}ltxdoc\DeleteShortVerb{\|}\begin{document}

这不应该引起任何副作用,因为您可以根据需要定义您自己的(其他)缩写逐字命令。

在此处输入图片描述

\documentclass[a4paper]{ltxdoc}% http://ctan.org/pkg/ltxdoc
\AtBeginDocument{\DeleteShortVerb{\|}}% | -> catcode "other"
\usepackage{tikz}% http://ctan.org/pkg/pgf
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
  \matrix[matrix of nodes, nodes in empty cells]{
     first & |[red]| second & third \\
  };
\end{tikzpicture}
\end{document}

相关内容