Zur Zeit erweitere ich ein TikZ-Trapez (Eingangsfrage mit Code: Trapezförmige Tabelle); und würde gerne wissen, wie ich

Open in writeLaTeX
\path [name intersections = {of=O1--U1 and L1--R1, by=11}]; \node at (11) {11};
\path [name intersections = {of=O2--U2 and L1--R1, by=21}]; \node at (21) {21};
\path [name intersections = {of=O3--U3 and L1--R1, by=31}]; \node at (31) {31};
\path [name intersections = {of=O4--U4 and L1--R1, by=41}]; \node at (41) {41};
\path [name intersections = {of=O5--U5 and L1--R1, by=51}]; \node at (51) {51};
\path [name intersections = {of=O6--U6 and L1--R1, by=61}]; \node at (61) {61};
\path [name intersections = {of=O1--U1 and L2--R2, by=12}]; \node at (12) {12};
\path [name intersections = {of=O2--U2 and L2--R2, by=22}]; \node at (22) {22};
\path [name intersections = {of=O3--U3 and L2--R2, by=32}]; \node at (32) {32};
\path [name intersections = {of=O4--U4 and L2--R2, by=42}]; \node at (42) {42};
\path [name intersections = {of=O5--U5 and L2--R2, by=52}]; \node at (52) {52};
...

über eine for -Schleife oder soetwas vereinfachen könnte?

gefragt 02 Mär '14, 02:31

rix's gravatar image

rix
39071823
Akzeptiert-Rate: 0%

zurückgesetzt 02 Mär '14, 12:27

@rix Bitte poste Folgefragen nicht als "Antwort", sondern als neue Frage, mit dem Button "Stelle eine Frage" rechts oben. Ich habe wieder die Nicht-Antwort in eine Frage umgewandelt: Kann ich den Inhalt eines Node nachträglich ändern?. Wir helfen Dir gern, Lösungen zu erarbeiten, dafür wäre es nett, wenn Du die zugegeben neuartige klare Aufteilung in Frage-Antwort mit verwendest.

(02 Mär '14, 15:26) stefan ♦♦

Sowas geht mit \foreach, auch mit mehreren Variablen. Da hier kein testbares Komplettbeispiel in der Frage ist, arbeite ich mit meinem Beispiel zur vorangehenden Frage. Dort kann ich die Zwischenlinien vereinfachen:

Open in writeLaTeX
\foreach \x / \y in {E/F, G/H, I/J}
  \path [name path global/.expanded=\x--\y] (\x) -- (\y);

Die Syntax erkennt man ja. Es geht auch mit 3 und mehr Variablen. Das eingefügte global/.expanded ist eine Weg, damit man Pfadnamen in der Schleife bestimmen kann - normalerweise nicht nötig.

Entsprechend für die Schnittpunkte:

Open in writeLaTeX
\foreach \schnitt / \punkt in {E--F and G--H/K, E--F and I--J/L} {
  \path [name intersections/.expanded = {of=\schnitt, by=\punkt}];
  \node at (\punkt) {\punkt};
}

Auch hier: mit intersections/.expanded={...} erreiche ich, dass erst {...} expandiert wird, d.h. die Makros darin (meine Schleifenvariablen) intern mit \edef ausgewertet werden, bevor die Zuweisung intersections={...} erfolgt. Der Trick ist wie gesagt bei einfachem \foreach meist nicht nötig, hier weil es innerhalb von Optionen passiert.

Ein compilierbares Testbeispiel damit, der vorigen verlinkten Frage entsprechend - am Beginn sieht man nochmal die einfache Form der \foreach-Schleife:

Open in writeLaTeX
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{tikzpicture}[every node/.append style={text depth=0.25ex, rectangle,
  rounded corners, minimum width=3em, minimum height=4ex, draw}]
  % Eckpunkte
  \foreach \punkt / \x / \y in {A/0/4, B/5/4, C/5/0, D/2/0}
    \node (\punkt) at (\x,\y) {\punkt};
  % Mittelpunkte obere und untere Seite
  \node (E) at ($ (A) !.5! (B) $) {E};
  \node (F) at ($ (D) !.5! (C) $) {F};
  % Dritteln linke Seite und sechte Seite
  \node (G) at ($ (A) !.3333! (D) $) {G};
  \node (H) at ($ (B) !.3333! (C) $) {H};
  \node (I) at ($ (A) !.6666! (D) $) {I};
  \node (J) at ($ (B) !.6666! (C) $) {J};
  % Zwischenlinien definieren
  \foreach \x / \y in {E/F, G/H, I/J}
    \path [name path global/.expanded=\x--\y] (\x) -- (\y);
  % Schnittpunkte der Zwischenlinien für die restlichen Gitterpunkte
  \foreach \schnitt / \punkt in {E--F and G--H/K, E--F and I--J/L} {
    \path [name intersections/.expanded = {of=\schnitt, by=\punkt}];
    \node at (\punkt) {\punkt};
  }
\end{tikzpicture}
\end{document}

Der Gewinn durch die \foreach-Schleifen zeigt sich dann, wenn, wie eingangs der Frage geschrieben, es sehr viele wiederholte Aufrufe gibt.

Permanenter link

beantwortet 02 Mär '14, 10:57

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 49%

bearbeitet 02 Mär '14, 13:26

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×21
×21

gestellte Frage: 02 Mär '14, 02:31

Frage wurde gesehen: 10,735 Mal

zuletzt geändert: 02 Mär '14, 22:03