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
\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} %=========== |
Eine alternative Lösung zu der von @esdd wäre mit der Plain TeX Primitive Open in writeLaTeX
\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} Falls nur einer der beiden Vergleichspartner expandiert werden soll, bietet sich Open in writeLaTeX
\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} Das Ergebnis ist natürlich immer das gleiche. Man kann auch eine der zahlreichen Funktionen aus Open in writeLaTeX
\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} Um mehrere Elemente auszuschließen muss man entweder die Open in writeLaTeX
\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} beantwortet 13 Mai '14, 14:02 Henri 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
|
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 Open in writeLaTeX
\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} Sinnvoll ist so etwas vielleicht dann, wenn man einzelne (von mehreren) Schleifenaktionen für ein Element unterbinden will/muss. beantwortet 12 Mai '14, 02:39 esdd |