我花了一些时间尝试解决 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}