Pregunta

I intentado para comprimir un tikzpicture utilizando la siguiente newcommand:

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

Si lo aplico al siguiente ejemplo, consigo un documento de trabajo. Sin embargo, con el ejemplo dado a continuación da una pdflatex Package pgf Error: No shape named is known. (nótese el doble de espacio entre "nombre" y "es"). Si amplío manualmente la segunda tchild consigo un documento de trabajo, también. Cualquier idea lo que va mal aquí?

\begin{tikzpicture}
    \node{0} [grow'=right]
        \tchild{0}{1}{}
        \tchild{1}{0}{};
\end{tikzpicture}
¿Fue útil?

Solución

Editar: Para algunos realmente genial (y trabajar) con ejemplos de PerlTeX TikZ ven esto Remolcador artículo !

creo que esto es debido al hecho de que la sintaxis de una imagen TikZ es mucho más que el látex de forma libre en general. Puedo ver que en el pgfmanual al poner comandos TikZ en una macro, la macro contiene el entorno tikzpicture (véase por ejemplo la página 223 de pgfmanual.pdf, que es la primera página de la sección de bibliotecas (IV)).

Sé que llego a ser un disco rayado, pero para definir macros complicados, recomiendo el uso de PerlTeX si es posible. Esto permite que las macros mucho más complicado de definir y también permite que algunos de los expandafter lío que hay que evitar.

Editar: El abajo (ver VIEJO) no funcionó debido a un comando completo TikZ debe ser devuelta por la macro PerlTeX, a lo cual también se burló de esta versión. El nuevo árbol de comando tiene tres argumentos, el nombre de la raíz, los ganglios de la raíz y me lo quitaron y luego los tres comandos que tenía originalmente, sin embargo configuración diferente. Cada niño es separado por dos puntos (:) y los tres comandos originales están separados por comas (,). Quizás es más fácil de ver el propio código. Una vez más el comando de compilación es el mismo que en VIEJO.

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

--- --- COMENZAR VIEJO

He intentado hackear algo juntos, aunque, no está compilando (probablemente debido al hecho de que nunca he utilizado para hacer TikZ árboles). Dicho esto, PerlTeX tal vez el problema no está dejando lo suficiente del comando TikZ. La conversión de un hash de Perl a un árbol TikZ podría ser un proyecto muy fresco. De todos modos aquí está. Tenga en cuenta que se compila con 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}

--- --- FIN VIEJO

Dicho todo esto, tal vez su problema es cómo se está tratando la opción # 3, tal vez si realmente hizo ese opcional en vez de definirse y se vacía funcionaría mejor (es decir, \ tchild [] {0} {1}) .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top