1
2

Hallo!

Gibt es eine Möglichkeit, einzelne Schleifenelemente auszuschließen? In folgendem Bsp. {-2,...,6} soll z.B. das Element 0 ausgeschlossen werden.

Die einzige mir bekannte Lösung ist hier {-2,-1,1,2,...,6}.

Geht das vll. besser?

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[margin=5mm]{standalone}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usepackage{amsmath, amssymb}
%===========
\begin{document}
%===========
\begin{tikzpicture}[]
\foreach \x in {-2,...,6}
\draw[] (\x,0pt) node[left]{$\x$};
\end{tikzpicture}
%===========
\end{document}
%===========
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gefragt 12 Mai '14, 01:05

cis's gravatar image

cis
9.6k104462491
Akzeptiert-Rate: 29%

bearbeitet 12 Mai '14, 16:08

esdd's gravatar image

esdd
17.8k304257


Eine alternative Lösung zu der von @esdd wäre mit der Plain TeX Primitive \if.

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \x in {-2,...,6} {
\if\x0\else
\node at (\x,0) {$\x$};
\fi
}
\end{tikzpicture}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Falls nur einer der beiden Vergleichspartner expandiert werden soll, bietet sich \ifx an:

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \x in {-2,...,6} {
\expandafter\ifx\x0\else
\node at (\x,0) {$\x$};
\fi
}
\end{tikzpicture}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Das Ergebnis ist natürlich immer das gleiche.

alt text


Man kann auch eine der zahlreichen Funktionen aus etoolbox verwenden:

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[tikz]{standalone}
\usepackage{etoolbox}
\begin{document}
% \ifnumcomp (Nur für Zahlen)
\begin{tikzpicture}
\foreach \x in {-2,...,6} {
\ifnumcomp{\x}{=}{0}{}{
\node at (\x,0) {$\x$};
}
}
\end{tikzpicture}
% \ifnumequal (Nur für Zahlen)
\begin{tikzpicture}
\foreach \x in {-2,...,6} {
\ifnumequal{\x}{0}{}{
\node at (\x,0) {$\x$};
}
}
\end{tikzpicture}
% ifstrequal (Braucht wieder expandafter)
\begin{tikzpicture}
\foreach \x in {-2,...,6} {
\expandafter\ifstrequal\expandafter{\x}{0}{}{
\node at (\x,0) {$\x$};
}
}
\end{tikzpicture}
% ifdefequal (Braucht wieder expandafter)
\begin{tikzpicture}
\foreach \x in {-2,...,6} {
\expandafter\ifdefequal\expandafter{\x}{0}{}{
\node at (\x,0) {$\x$};
}
}
\end{tikzpicture}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Um mehrere Elemente auszuschließen muss man entweder die \ifs schachteln oder verschachtelte \foreach bauen. Die Methode mit den verschachtelten \foreach erscheint zwar aufwendiger, lohnt sich aber so ab 5 ausgeschlossenen Elementen, da man nicht für jedes ein weiteres \if..\fi Paar braucht.

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \x in {-2,...,6} {
\if\x0\else
\if\x3\else
\node at (\x,0) {$\x$};
\fi
\fi
}
\end{tikzpicture}
\begin{tikzpicture}
\newif\ifinlist
\foreach \x in {-2,...,6} {
\inlisttrue
\foreach \s in {0,3} {
\if\x\s
\global\inlistfalse
\fi
}
\ifinlist
\node at (\x,0) {$\x$};
\fi
}
\end{tikzpicture}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

alt text

Permanenter link

beantwortet 13 Mai '14, 14:02

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 13 Mai '14, 14:48

Sowas einfaches hatte ich mir erhofft.

(13 Mai '14, 14:12) cis

Nur zur Vollständigkleit: Kann man hier auch einfach mehrere Elemente if'en, also z.B. 0 und 3 ausschließen?

(13 Mai '14, 14:22) cis
1

@cis Siehe aktualisierte Antwort.

(13 Mai '14, 14:47) Henri

Natürlich kannst du innerhalb der Schleife dann wieder Elemente ausschließen, aber "besser" wird das dadurch nicht und kürzer sowieso nicht. Nutzen kann man dafür zum Beispiel die Pakete ifthen oder etoolbox oder auch das bereits geladene pgfmath.

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[margin=5mm]{standalone}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {-2,...,6}
\path (\x,0) node[left]{$\pgfmathparse{\x==0?:int(\x)}\pgfmathresult$};
\end{tikzpicture}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

alt text

Sinnvoll ist so etwas vielleicht dann, wenn man einzelne (von mehreren) Schleifenaktionen für ein Element unterbinden will/muss.

Permanenter link

beantwortet 12 Mai '14, 02:39

esdd's gravatar image

esdd
17.8k304257
Akzeptiert-Rate: 62%

Deine Antwort
[Vorschau ausblenden]

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

Frage-Themen:

×731
×21
×21

gestellte Frage: 12 Mai '14, 01:05

Frage wurde gesehen: 14,031 Mal

zuletzt geändert: 13 Mai '14, 14:48