Wie kann ich in folgender Matrix Zeilen, die nur Brüche, also keine Ganzzahlen, enthalten blau färben? Möglichst automatisch (falls nicht zu aufwendig bzw. nur noch mit Lua o.ä. möglich). Die manuelle Methode Öffne in Overleaf
MakeBlue/.style={row #1/.style={nodes={text=blue}}} MakeBlue/.list={2,3,4,6}, funktioniert hier auch nicht, da die Zellen nachträglich nach Berechnung gesetzt werden. Öffne in Overleaf
%\documentclass[11pt]{scrartcl} \documentclass[border=3mm, varwidth]{standalone} \usepackage[ngerman]{babel} \usepackage{pgf, pgffor, tikz, amsmath, amssymb} \usetikzlibrary{math, matrix} \begin{document} $M_n(k) = (2k-1)\cdot 2^n - 1 \text{ mit } k,n \in \mathbb{N}_{\geq 1}$ \\ \tikzmath{ % Berechnung der Folgenglieder function Mersenne(\k, \n) {return int((2*\k-1)*2^\n-1);}; % Bestimmung des Reduzierten Bruches function RedZaehler(\zahler, \nenner) {return int(\zahler/gcd(\zahler,\nenner));}; function RedNenner(\zahler, \nenner) {return int(\nenner/gcd(\zahler,\nenner));}; } % Ausgabe des reduzierten Bruches \newcommand{\rfrac}[2]{%%%%%%%%%%%%%%%%%% \pgfmathtruncatemacro{\RedZaehler}{RedZaehler(#1,#2)} \pgfmathtruncatemacro{\RedNenner}{RedNenner(#1,#2)} \pgfmathtruncatemacro{\Eins}{1} \ifnum \RedNenner = \Eins $\textcolor{red}{\RedZaehler}$ % ganz \else $\frac{\RedZaehler}{\RedNenner}$ % Bruch \fi }%%%%%%%%%%%%%%%%%% %Test Mersenne: \pgfmathparse{Mersenne(1,3)} \pgfmathresult \\ %Test RedZaehler: \pgfmathparse{RedZaehler(6, 2)} \pgfmathresult \\ %Test reduzierter Bruch: \rfrac{6}{2} ~~ \rfrac{18}{11} ~~ \rfrac{4}{12} \\ %Test Mersenne Bruch: \rfrac{Mersenne(1,1)}{7} \def\nMaxSpalte{3} % Länge der anzuzeigenden Mersenne Folge \def\nMaxZeile{7} \def\MatrixZeile{ \& \& \\ } % "nMaxSpalte-1 \&-Zeichen" \def\MatrixZeilen{% % nMaxZeile \MatrixZeile \MatrixZeile \MatrixZeile \MatrixZeile \MatrixZeile \MatrixZeile \MatrixZeile }% % Divisor der Divisormatrix \pgfmathtruncatemacro{\Divisor}{7} $M_{\text{di}}(\Divisor)=M_{\text{M}} \cdot \frac{1}{\Divisor}= \begin{matrix} % normale Matrix damit angepasst an Rest \begin{tikzpicture} \matrix (m) [ ampersand replacement=\&, matrix of math nodes, nodes in empty cells, row sep = 1.125em, column sep = 1.25em, left delimiter = (, right delimiter = ), %nodes={}, % Blaue Zeilen MakeBlue/.style={row #1/.style={nodes={text=blue}}} MakeBlue/.list={2,3,4,6}, ] {% \MatrixZeilen }; % Matrixelemente hervorheben % \node[fill=red!50, minimum width = 1.5em, minimum height = 1.25em, % rounded corners=1.5pt, % align=right] at (m-1-3) {}; % Matrix füllen mit Zahlen \foreach \k in {1,...,\nMaxZeile} \foreach \n in {1,...,\nMaxSpalte} \node[align=right] at (m-\k-\n) {\rfrac{Mersenne(\k,\n)}{\Divisor}}; \end{tikzpicture} \end{matrix}$ \end{document} gefragt 04 Jan '18, 16:42 cis |
Hab es hinbekommen: Öffne in Overleaf
%\documentclass[11pt]{scrartcl} \documentclass[border=3mm, varwidth]{standalone} \usepackage[ngerman]{babel} \usepackage{tikz, amsmath, amssymb} \usetikzlibrary{math, matrix} % Muss auf dem MP angegeben werden! \usetikzlibrary{matrix} \begin{document} $M(k,n) = (2k-1)\cdot 2^n - 1 \text{ mit } k,n \in \mathbb{N}_{> 0}$ \\ %%%%%%%%%%%%% % EINGABEN! %%%%%% %%%%%%%%%%%%% % 1. Lege den Divisior der Divisormatrix fest. \pgfmathtruncatemacro{\Divisor}{7} % Divisor der Divisormatrix % \newcommand\Einleitungstext{% M_{\text{di}}(\Divisor) = M_{\text{M}} \cdot \dfrac{1}{\Divisor} = }% wahlweise leer lassen / auskommentieren... % 2a. Lege die Dimensionen der Divisormatrix fest. \def\nMaxZeile{7} % Länge der Mersenne Folge in Zeilen \def\nMaxSpalte{3} % Länge der Mersenne Folge in Spalten % 2b. Passe die Syntax für die spätere tikz-Matrix an. \def\MatrixZeile{ \& \& \\ } % "nMaxSpalte minus 1" \&-Zeichen setzen \def\MatrixZeilen{% % "nMaxZeile" Stück eintragen \MatrixZeile \MatrixZeile \MatrixZeile \MatrixZeile \MatrixZeile \MatrixZeile \MatrixZeile }% %%%%%%%%%%%%% %%% fertig! %%%%% %%%%%%%%%%%%% % 3. Passe evtl. noch row sep = ****em, column sep = ****em, % in der späteren tikz-Matrix optisch an. %%%%%%%%%%%%% %%%%%%%%%%%%% \tikzmath{ % Berechnung der Folgenglieder function Mersenne(\K, \N) {return int((2*\K-1)*2^\N-1);}; % Bestimmung des Reduzierten Bruches function RedZaehler(\zaehler,\nenner) {return int(\zaehler/gcd(\zaehler,\nenner));}; function RedNenner(\zaehler,\nenner) {return int(\nenner/gcd(\zaehler,\nenner));}; % Bestimmung von Zähler und Nenner im MersenneBruch function MersenneNenner(\K,\N,\divisor) {return int(RedNenner(Mersenne(\K,\N),\divisor) );}; function MersenneZaehler(\K,\N,\divisor) {return int(RedZaehler(Mersenne(\K,\N),\divisor) );}; } % Farbige Ausgabe des reduzierten Mersenne Bruches % \MersenneBruch{<k>}{<n>} \newcommand\MersenneBruch[2]{%%%%%%%%%%%%%%%%%% \begingroup \pgfmathsetmacro{\Eins}{1} % als Vergleichsoperator % Zähler und Nenner des Mersenne-Bruches festlegen \pgfmathtruncatemacro{\Nenner}{MersenneNenner(#1,#2,\Divisor)}% \pgfmathtruncatemacro{\Zaehler}{MersenneZaehler(#1,#2,\Divisor)}% % \pgfmathsetmacro{\y}{0} \foreach \Spalte in {1,...,\nMaxSpalte}{% \pgfmathtruncatemacro{\MNenner}{MersenneNenner(#1,\Spalte,\Divisor)}% \ifx \MNenner\Eins%Prüfen,ob in 1,...,\nMaxSpalte eine 1 im Nenner \global\let\y=\MNenner% %\pgfmathsetmacro{\y}{\MNenner} \else \let\y=0% \fi }% \ifx \y\Eins% %Wenn in 1,...,\nMaxSpalte eine 1 im Nenner... \ifx \Nenner\Eins% \textcolor{red}{\Zaehler}% \else $\frac{\Zaehler}{\Nenner}$% \fi \else $\textcolor{blue}{\frac{\Zaehler}{\Nenner}}$% \fi \endgroup }%%%%%%%%%%%%%%%%%%%%%%%%% %Test: \MersenneBruch{1}{1}, \MersenneBruch{1}{4}, \MersenneBruch{6}{1},\MersenneBruch{2}{1} % Mersenne-Matrix setzen $\Einleitungstext \begin{matrix} % normale Matrix damit angepasst an Rest \begin{tikzpicture} \matrix (m) [ % tikz-Matrix ampersand replacement=\&, matrix of math nodes, nodes in empty cells, row sep = 1.125em, % Zeilenabstand optisch anpassen! column sep = 1.25em, % Spaletenabstand optisch anpassen! left delimiter = (, right delimiter = ), % Klammern ] {% \MatrixZeilen }; % Matrixelemente hervorheben % \nennerode[fill=red!50, minimum width = 1.5em, minimum height = 1.25em, % rounded corners=1.5pt, % align=right] at (m-1-3) {}; % Matrix füllen mit Zahlen \foreach \k in {1,...,\nMaxZeile} \foreach \n in {1,...,\nMaxSpalte} \node[align=center] at (m-\k-\n) {\MersenneBruch{\k}{\n}}; % Test: %\node[align=right, text=blue] at (m-2-1) {}; \end{tikzpicture} \end{matrix}$ \end{document} beantwortet 06 Jan '18, 22:40 cis |