Matroids Matheplanet Forum Index
Moderiert von Stefan_K
Matroids Matheplanet Forum Index » Textsatz mit LaTeX » Modulo-Operator in Tikz bei /draw
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Modulo-Operator in Tikz bei /draw
InOMatrix
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 17.04.2019
Mitteilungen: 33
Aus: Berlin, Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2020-10-01 01:38


Hallo zusammen,

grob gesagt würde ich ganz gerne ein in x- und y-Richtung gestacktes 2x2-Muster mit vier unterschiedlichen Farben plotten. Allerdings bekomme ich Probleme mit den Farbzuweisungen. Ich habe dazu folgenden Beispielcode
\documentclass{article}
\usepackage{tikz}
 
\definecolor{col00}{named}{red}
\definecolor{col01}{named}{yellow}
\definecolor{col10}{named}{blue}
\definecolor{col11}{named}{violet}
 
\begin{document}
	\begin{tikzpicture}
		\foreach \i in {0,...,4}
		\foreach \j in {0,...,4}
		\coordinate[] (\i\j) at (\i,\j) {};
		\foreach \i [count=\ii] in {0,...,3}
		\foreach \j [count=\jj] in {0,...,3}
		\draw[fill=col{mod(\i,2)}{mod(\j,2)}] (\i\j) -- (\i\jj) -- (\ii\jj) -- (\ii\j) -- cycle;
	\end{tikzpicture}
\end{document}

Wenn ich versuche, diese Datei zu kompilieren, so erhalte ich die Fehlermeldungen:
Package xcolor Error: Undefined color `col{mod(0,2)}{mod(0,2)}'. ...- (\i\jj) -- (\ii\jj) -- (\ii\j) -- cycle;
Missing \endcsname inserted. ...- (\i\jj) -- (\ii\jj) -- (\ii\j) -- cycle;

Das Problem liegt in der Zeile mit dem /draw-Befehl. Wenn ich hinter \fill= eine normale Farbe schreibe, erhalte ich ein 4x4-Feld in der angegebenen Farbe und der Code wird ohne Fehlermeldungen kompiliert.

Kann mit jemand sagen, wie ich die Farben wie gewünscht angeben kann?

Vielen Dank im Vorraus.

InOMatrix



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Wario
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 01.05.2020
Mitteilungen: 103
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2020-10-01 02:53


2020-10-01 01:38 - InOMatrix im Themenstart schreibt:
\documentclass{article}
\usepackage{tikz}
 
\definecolor{col00}{named}{red}
\definecolor{col01}{named}{yellow}
\definecolor{col10}{named}{blue}
\definecolor{col11}{named}{violet}
 
\begin{document}
	\begin{tikzpicture}
		\foreach \i in {0,...,4}
		\foreach \j in {0,...,4}
		\coordinate[] (\i\j) at (\i,\j) {};
		\foreach \i [count=\ii] in {0,...,3}
		\foreach \j [count=\jj] in {0,...,3}
		\draw[fill=col{mod(\i,2)}{mod(\j,2)}] (\i\j) -- (\i\jj) -- (\ii\jj) -- (\ii\j) -- cycle;
	\end{tikzpicture}
\end{document}


An der Stelle
\draw[fill=col{mod(\i,2)}{mod(\j,2)}] wird nichts berechnet.
Du kannst es z.B. so machen:


\pgfmathsetmacro\I{int(mod(\i,2))}
\pgfmathsetmacro\J{int(mod(\j,2))}
\def\tempcolor{col\I\J}
\draw[fill=\tempcolor] (\i\j) -- (\i\jj) -- (\ii\jj) -- (\ii\j) -- cycle;



latex
\documentclass{article}
\documentclass{article}
\usepackage{tikz}
 
\foreach \No/\mycolor in {00/red,  01/yellow,  10/blue,  11/violet}{
\xglobal\colorlet{col\No}{\mycolor}
}
 \begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,4}{%%
\foreach \j in {0,...,4}{%
\coordinate[] (\i\j) at (\i,\j);   % {} --> coordinate hat 'keinen (possibly empty) label text'
}}% %%
 
\foreach \i [count=\ii] in {0,...,3}{%%
\foreach \j [count=\jj] in {0,...,3}{%
% Neu
\pgfmathsetmacro\I{int(mod(\i,2))}
\pgfmathsetmacro\J{int(mod(\j,2))}
\def\tempcolor{col\I\J}
\draw[fill=\tempcolor] (\i\j) -- (\i\jj) -- (\ii\jj) -- (\ii\j) -- cycle 
node[fill=yellow!77!red, inner sep=1pt, midway, above=2pt, rounded corners=1pt]{\tempcolor};
% Alt
%\draw[fill=col{mod(\i,2)}{mod(\j,2)}] (\i\j) -- (\i\jj) -- (\ii\jj) -- (\ii\j) -- cycle;
}}% %%
\end{tikzpicture}
\end{document}

Hinweis: coordinate hat, anders als node,  keinen '(possibly empty) label text' '{}'



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
InOMatrix
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 17.04.2019
Mitteilungen: 33
Aus: Berlin, Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2020-10-01 14:21


Hallo @Wario,

das passt perfekt, super!

Ich hatte selbst mit solchen Ausdrücken wie \the\numexpr\j\relax, oder \pgfmathparse herumprobiert, allerdings führte nichts zum Erfolg.

Aber nun klappt es ja, und da bedanke ich mich nochmal bei Dir! 🙂

Viele Grüße

InOMatrix



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Wario
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 01.05.2020
Mitteilungen: 103
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2020-10-01 15:41


Nachdem das Problem geklärt ist, sei erwähnt, dass Du das Ganze auch mit nur einem Schleifenpaar haben kannst. Die count-Variablen sind dann auch unnötig.

<math>
\foreach \No/\mycolor in {00/red,  01/yellow,  10/blue,  11/violet}{
\xglobal\colorlet{col\No}{\mycolor}
}

\begin{tikzpicture}
\foreach \x in {0,...,3}{%%
\foreach \y in {0,...,3}{%
\coordinate[] (\x\y) at (\x,\y);

\pgfmathsetmacro\X{int(mod(\x,2))}
\pgfmathsetmacro\Y{int(mod(\y,2))}
\def\tempcolor{col\X\Y}
\draw[fill=\tempcolor] (\x\y) rectangle +(1,1)
node[fill=orange, inner sep=1pt, midway, rounded corners=1pt]{\tempcolor};
}}% %%
\end{tikzpicture}</math>


Ich nehme hier \x und \y, statt \i und \j, weil das anschaulicher ist.
latex
\documentclass{article}
\usepackage{tikz}
 
\foreach \No/\mycolor in {00/red,  01/yellow,  10/blue,  11/violet}{
\xglobal\colorlet{col\No}{\mycolor}
}
 
\begin{document}
\begin{tikzpicture}
\foreach \x in {0,...,3}{%%
\foreach \y in {0,...,3}{%
\coordinate[] (\x\y) at (\x,\y);  
 
\pgfmathsetmacro\X{int(mod(\x,2))}
\pgfmathsetmacro\Y{int(mod(\y,2))}
\def\tempcolor{col\X\Y}
\draw[fill=\tempcolor] (\x\y) rectangle +(1,1)
node[fill=orange, inner sep=1pt, midway, rounded corners=1pt]{\tempcolor};
}}% %%
\end{tikzpicture}
\end{document}

PS: Warum ist das grundsätzlich besser?
Hier war die Urform jetzt nicht schlimm, aber zusätzliche, und dann unbenötigte, Koordinaten können unschöne Effekte haben, wie Whitespace.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
InOMatrix hat die Antworten auf ihre/seine Frage gesehen.
InOMatrix wird per Mail über neue Antworten informiert.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]