
EsteCódigo TikZ para dibujar un icosaedro y etiquetarlo.da sólo una respuesta parcial a mi pregunta.
Con el siguiente código
\documentclass{article}
\usepackage{tkz-berge}
\begin{document}
\begin{tikzpicture}
\grPath[Math,prefix=v,RA=-1,RS=0]{9}
\begin{scope}[xshift=0.5 cm]
\grPath[Math,prefix=y,RA=-1,RS=1]{10}
\end{scope}
\begin{scope}[xshift=1.5 cm]
\grPath[Math,prefix=y,RA=-1,RS=2]{10}
\end{scope}
\end{tikzpicture}
\end{document}
tenemos vértices numerados desde $x_0$, $y_o$, $z_0$. ¿Es posible numerarlos desde $x_1$ y así sucesivamente, sin etiquetar manualmente alrededor de 30 posiciones?
Respuesta1
Este es un enfoque más dinámico en el que no es necesario escribir los nombres de cada uno de los vértices.
\documentclass{article}
\usepackage{etoolbox}
\usepackage{tkz-berge}
\def\myInstance#1#2{$#1_{#2}$}
\newcommand\aeAssignLabels[3]{%%
\let\myexecutable\relax
\foreach \myn in {#3}
{%%
\ifx\myexecutable\relax
\xdef\myexecutable{\myInstance{#2}{\myn}}%%
\else
\xdef\myexecutable{\expandonce\myexecutable,\myInstance{#2}{\myn}}%%
\fi
}%%
\edef\myexecutable{\noexpand#1{#2}{\expandonce\myexecutable}}%%
\myexecutable
}
\begin{document}
\begin{tikzpicture}
\SetVertexNoLabel
\grPath[Math,prefix=x,RA=-1,RS=0]{9}
\aeAssignLabels\AssignVertexLabel{x}{9,...,1}%%
\begin{scope}[xshift=0.5 cm]
\grPath[Math,prefix=y,RA=-1,RS=1]{10}
\aeAssignLabels\AssignVertexLabel{y}{10,...,1}%%
\end{scope}
\begin{scope}[xshift=1.5 cm]
\grPath[Math,prefix=z,RA=-1,RS=2]{10}
\aeAssignLabels\AssignVertexLabel{z}{10,...,1}%%
\end{scope}
\end{tikzpicture}
\end{document}
La idea aquí es usar \foreach
, que viene gratis cuando se usa casi cualquier cosa de TikZ. Es posible escribir esto sin usar el etoolbox
paquete, pero es mucho más complicado y difícil de seguir. Sin embargo, al utilizar las etoolbox
herramientas del paquete, puede controlar cuándo se produce la expansión de los distintos tokens y crear la macro de asignación y luego ejecutarla.
La macro que defino tiene la siguiente sintaxis:
\aeAssignLabels<control sequence>{<variable name>}{<range of numbers>}
Usando el \foreach
bucle para recorrer elrango, puede crear la macro que se ejecutará. Dado que cada ciclo del bucle de pgf \foreach
ocurre dentro de un grupo, es necesarioglobalmentehacer las asignaciones. Esto se hace a través de \xdef
cuál es equivalente a \global\edef
cuál expande el token en su definición en el momento de la definición.
Y, si bien esto puede parecer tanto trabajo como escribir a mano en cada uno de los nombres de los vértices, esperamos que este código ilustre un método que luego puedas duplicar fácilmente en otros lugares y realmente recortar algunos gastos.
Respuesta2
Elrespuesta a la que te vinculastete dice cómo agregar las etiquetas. Primero debe detener la impresión de las etiquetas \SetVertexNoLabel
y luego debe especificar manualmente las etiquetas que desea usar \AssignVertexLabel
:
Aquí está el código completo para cambiar manualmente las etiquetas:
\documentclass{article}
\usepackage{tkz-berge}
\begin{document}
\begin{tikzpicture}
\SetVertexNoLabel
\grPath[Math,prefix=x,RA=-1,RS=0]{9}
\AssignVertexLabel{x}{$x_9$,$x_8$,$x_7$,$x_6$,$x_5$,$x_4$,$x_3$,$x_2$,$x_1$};
\begin{scope}[xshift=0.5 cm]
\grPath[Math,prefix=y,RA=-1,RS=1]{10}
\AssignVertexLabel{y}{$y_{10}$,$y_9$,$y_8$,$y_7$,$y_6$,$y_5$,$y_4$,$x_3$,$y_2$,$y_1$};
\end{scope}
\begin{scope}[xshift=1.5 cm]
\grPath[Math,prefix=z,RA=-1,RS=2]{10}
\AssignVertexLabel{z}{$z_{10}$,$z_9$,$z_8$,$z_7$,$z_6$,$z_5$,$z_4$,$x_3$,$z_2$,$z_1$};
\end{scope}
\end{tikzpicture}
\end{document}
Editar
Cuando respondí esta pregunta por primera vez, no vi la solicitud para poder hacer esto sina manoinsertando todas las etiquetas. Luego traté de descubrir cómo hacer esto "correctamente". Pude construir la lista de etiquetas con bastante facilidad, pero no pude descubrir cómo pasar esta lista hasta \AssignVertexLabel
que se publicó la solución de @A.Ellett. Usando el truco de expansión de la publicación de @A.Ellett aquí hay una versión automatizada que produce el mismo resultado que el anterior.
\documentclass{article}
\usepackage{tikz}
\usepackage{tkz-berge}
\usepackage{etoolbox}
\newcommand\AssignMyLabels[2]{% \AssignMyLabels{symbol}{number}
\def\mylabels{$#1_{1}$}
\foreach\c in {2,...,#2} {
\xdef\mylabels{\mylabels, $#1_{\c}$}
}
\edef\doThemLabels{\noexpand\AssignVertexLabel{#1}{\expandonce{\mylabels}}}
\doThemLabels
}
\begin{document}
\begin{tikzpicture}
\SetVertexNoLabel
\grPath[Math,prefix=x,RA=-1,RS=0]{9}
\AssignMyLabels{x}{9}
\begin{scope}[xshift=0.5 cm]
\grPath[Math,prefix=y,RA=-1,RS=1]{10}
\AssignMyLabels{y}{10}
\end{scope}
\begin{scope}[xshift=1.5 cm]
\grPath[Math,prefix=z,RA=-1,RS=2]{10}
\AssignMyLabels{z}{10}
\end{scope}
\end{tikzpicture}
\end{document}