
DasTikZ-Code zum Zeichnen und Beschriften eines Ikosaedersgibt nur eine teilweise Antwort auf meine Frage.
Mit dem folgenden Code
\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}
Wir haben Eckpunkte, die von $x_0$, $y_o$, $z_0$ nummeriert sind. Ist es möglich, sie von $x_1$ usw. aus zu nummerieren, ohne etwa 30 Positionen manuell zu beschriften?
Antwort1
Hier ist ein dynamischerer Ansatz, bei dem Sie nicht die Namen aller Scheitelpunkte ausschreiben müssen.
\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}
Die Idee hier ist, zu verwenden \foreach
, das kostenlos mitgeliefert wird, wenn Sie so ziemlich alles von TikZ verwenden. Es ist möglich, dies zu schreiben, ohne das etoolbox
Paket zu verwenden, aber es ist viel komplizierter und schwieriger zu verfolgen. Trotzdem können Sie mit den etoolbox
Pakettools steuern, wann die Erweiterung der verschiedenen Token erfolgt, das Zuweisungsmakro erstellen und es dann ausführen.
Das von mir definierte Makro hat die folgende Syntax:
\aeAssignLabels<control sequence>{<variable name>}{<range of numbers>}
Mit der \foreach
Schleife durch dieReichweitekönnen Sie das auszuführende Makro erstellen. Da jeder Zyklus der pgf- \foreach
Schleife innerhalb einer Gruppe stattfindet, müssen Sieglobalnehmen Sie die Zuweisungen vor. Dies geschieht über „ \xdef
which“ ist gleichbedeutend mit \global\edef
„which“ erweitert das Token in seiner Definition zum Zeitpunkt der Definition.
Und obwohl dies genauso viel Arbeit zu sein scheint, wie die einzelnen Scheitelpunktnamen von Hand einzutragen, veranschaulicht dieser Code hoffentlich eine Methode, die Sie dann problemlos anderswo duplizieren und so wirklich einiges an Arbeit sparen können.
Antwort2
DerAntwort, auf die Sie verlinkt habenerklärt Ihnen, wie Sie die Etiketten hinzufügen. Sie müssen zuerst den Etikettendruck mit stoppen \SetVertexNoLabel
und dann manuell angeben, welche Etiketten Sie verwenden möchten \AssignVertexLabel
:
Hier ist der vollständige Code zum manuellen Ändern der Beschriftungen:
\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}
Bearbeiten
Als ich diese Frage zum ersten Mal beantwortete, sah ich nicht die Aufforderung, dies tun zu können, ohnemanuellalle Beschriftungen einfügen. Dann habe ich versucht, herauszufinden, wie man das „richtig“ macht. Ich konnte die Liste der Beschriftungen recht einfach erstellen, aber ich konnte nicht herausfinden, wie ich diese Liste weitergeben sollte, \AssignVertexLabel
bis die Lösung von @A.Ellett gepostet wurde. Unter Verwendung des Erweiterungstricks aus @A.Elletts Post gibt es hier eine automatisierte Version, die dieselbe Ausgabe wie oben erzeugt.
\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}