Edit: некоторые действительно классные (и работающие) примеры PerlTeX с TikZ см. В этой статье TUGboat !
Я полагаю, это связано с тем, что синтаксис изображения TikZ намного более свободен, чем LaTeX в целом. Я вижу, что в pgfmanual при помещении команд tikz в макрос макрос содержит среду tikzpicture (см., Например, страницу 223 файла pgfmanual.pdf, то есть первой страницы раздела «Библиотеки» (IV)).
Я знаю, что получаю неработающую запись, но для определения сложных макросов я рекомендую использовать PerlTeX, если это возможно. Это позволяет определять гораздо более сложные макросы, а также позволяет избежать некоторой путаницы в расширении.
Редактировать: приведенное ниже (см. OLD) не сработало, потому что макрос PerlTeX должен возвращать полную команду TikZ, для этого я смоделировал эту версию. Новое командное дерево принимает три аргумента: корневое имя, аргументы корневого узла, а затем три команды, которые у вас изначально были, но настроены иначе. Каждый дочерний элемент разделен двоеточием (:), а три исходные команды разделены запятыми (,). Возможно, легче увидеть сам код. Снова команда компиляции такая же, как в OLD.
\documentclass{article}
\usepackage{perltex}
\usepackage{tikz}
\perlnewcommand{\tree}[3]{
my ($root,$root_opts,$children) = @_;
my @children = split(/\:/, $children);
my $return = '';
$return .= sprintf( "\\node{%s} \[%s\]\n", $root,$root_opts);
foreach my $child (@children) {
my ($edge, $vertex, $child_nodes) = split(/,/, $child);
$child_nodes ||= '';
$return .= sprintf("child { node{%s} %s edge from parent node[above]{%s} }\n",$vertex,$child_nodes,$edge);
}
$return .= "\;\n";
return $return;
}
\begin{document}
\begin{tikzpicture}
% \node{0} [grow'=right]
% child { node{1} edge from parent node[above]{0} }
% child { node{0} edge from parent node[above]{1} };
\tree{0}{grow'=right}{0,1:1,0}
\end{tikzpicture}
\end{document}
--- НАЧИНАЕТСЯ ---
Я пытался что-то взломать вместе, хотя он не компилируется (возможно, из-за того, что я никогда не использовал TikZ для создания деревьев). Тем не менее, возможно, проблема в том, что PerlTeX не достаточно выполняет команду TikZ. Преобразование хэша Perl в дерево TikZ может быть очень интересным проектом. Во всяком случае здесь это. Обратите внимание, что вы компилируете это с perltex --latex=pdflatex text.tex
:
\documentclass{article}
\usepackage{perltex}
\usepackage{tikz}
\perlnewcommand{\tchild}[3]{
my ($edge, $vertex, $child) = @_;
$child ||= '';
my $return = 'child { node{' . $vertex . '} ' . $child . ' edge from parent node[above]{' . $edge . '} }';
return $return;
}
\begin{document}
\begin{tikzpicture}
\node{0} [grow'=right]
\tchild{0}{1}{}
\tchild{1}{0}{}
;
\end{tikzpicture}
\end{document}
--- END OLD ---
Все это говорит о том, что, возможно, ваша проблема в том, как вы относитесь к необязательному # 3, возможно, если вы действительно сделали этот необязательный, а не определенный и пустой, он будет работать лучше (то есть, \ tchild [] {0} {1}) .