alt text

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's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 04 Jan '18, 17:42


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}
Permanenter link

beantwortet 06 Jan '18, 22:40

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

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
×58
×5

gestellte Frage: 04 Jan '18, 16:42

Frage wurde gesehen: 5,703 Mal

zuletzt geändert: 06 Jan '18, 22:40