質問

圧縮しようとしました tikzpicture 以下を使用します newcommand:

\newcommand{\tchild}[3]{ child { node{#2} #3 edge from parent node[above]{#1} } }
%intended usage: \tchild{edge label}{vertex label}{child nodes}

次の例に適用すると、作業ドキュメントが表示されます。ただし、以下に示す例があります pdflatex を与える Package pgf Error: No shape named is known. (「名前が付けられた」と「IS」の間の二重スペースに注意してください)。 2番目を手動で拡張する場合 tchild 私も作業ドキュメントを取得します。ここで何が問題になっているのか何かアイデアはありますか?

\begin{tikzpicture}
    \node{0} [grow'=right]
        \tchild{0}{1}{}
        \tchild{1}{0}{};
\end{tikzpicture}
役に立ちましたか?

解決

編集:Tikzを使用したPerltexのいくつかの本当にクールな(そして機能している)例については、これを参照してください タグボートの記事!

これは、Tikzの画像の構文が一般的にラテックスよりもはるかに自由なものであるという事実によると思います。 Tikzコマンドをマクロに入れるときにPGFManualでは、マクロにはTikzPicture環境が含まれていることがわかります(PGFManual.pdfの223ページを参照してください。これは、ライブラリセクション(IV)の最初のページです)。

私は壊れたレコードになることを知っていますが、複雑なマクロを定義するために、可能であればPerltexを使用することをお勧めします。これにより、はるかに複雑なマクロを定義することができ、拡張後のいくつかの混乱を回避することもできます。

編集:以下(古いを参照)は機能しませんでした。なぜなら、完全なTikzコマンドはPerltex Macroによって返されなければならないため、この目的のために、このバージョンをock笑しました。新しいコマンドツリーは、ルート名、ルートノードの引数、そしてあなたが元々持っていた3つのコマンドを3つの引数を採用しますが、ただしセットアップが異なります。各子供はコロン(:)で区切られ、3つの元のコマンドはコンマ(、)で区切られています。おそらく、コード自体を見るのが簡単です。繰り返しますが、コンパイルコマンドは古いものと同じです。

\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}

---昔から始める---

私は一緒に何かをハッキングしようとしましたが、それはコンパイルされていません(おそらく、私は木を作るためにティクを使用したことがないという事実のためです)。とはいえ、おそらく問題は、PerltexにTikzコマンドを十分に実行させることではありません。 Perl Hashを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}

---古い終わり---

とはいえ、おそらくあなたの問題は、オプションの#3をどのように扱っているかです。おそらく、定義されて空になるのではなくオプションを実際に作った場合、それはより良く動作します(つまり、 tchild [] {0} {1})。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top