Folgender Code berechnet einen reduzierten Bruch. Wie kann ich das, für mehr Flexibilität, mit der Bibliothek math umsetzen?

Öffne in Overleaf
%\documentclass[varwidth, margin=10mm]{standalone}
\documentclass{article}
\usepackage[ngerman]{babel}

\usepackage{amsmath, amsfonts, amssymb}
\usepackage{tikz}
%\usepackage{pgf, pgffor, tikz, amsmath, amssymb}
\usetikzlibrary{math}
%\usetikzlibrary{calc}

\begin{document}

% Bestimmung von Zähler und Nenner 
% des reduzierten Bruches von Z/N, das ist (Z / gcd(Z,N)) / (N / gcd(Z,N))
\pgfmathtruncatemacro{\Z}{42}
\pgfmathtruncatemacro{\N}{21}
\pgfmathtruncatemacro{\Eins}{1}
\pgfmathtruncatemacro{\Numerator}{\Z/gcd(\Z,\N)} 
\pgfmathtruncatemacro{\Denominator}{\N/gcd(\Z,\N)}

\ifnum \Denominator  = \Eins
    $\dfrac{\Z}{\N} = \Numerator$
\else
    $\dfrac{\Z}{\N} = \dfrac{\Numerator}{\Denominator}$ 
\fi

%Tut nicht:
%\tikzmath{ 
%function GCD(\x, \y) {return gcd(x,y);};
%int \G;
%\G = GCD(\x, \y);
%}
%\G(42,21)

\end{document}

gefragt 02 Jan, 10:52

cis's gravatar image

cis
6.1k11135224
Akzeptiert: 70%

bearbeitet 02 Jan, 11:51


Hab es hinbekommen:

Öffne in Overleaf
\documentclass[varwidth, margin=10mm]{standalone}
%\documentclass{article}
\usepackage[ngerman]{babel}

\usepackage{amsmath, amsfonts, amssymb}
\usepackage{tikz}
%\usepackage{pgf, pgffor, tikz, amsmath, amssymb}
\usetikzlibrary{math}
%\usetikzlibrary{calc}

\begin{document}

Mit pgf: \\
% Bestimmung von Zähler und Nenner 
% des reduzierten Bruches von Z/N, das ist (Z / gcd(Z,N)) / (N / gcd(Z,N))
\pgfmathtruncatemacro{\Z}{42}
\pgfmathtruncatemacro{\N}{21}
\pgfmathtruncatemacro{\Eins}{1}
\pgfmathtruncatemacro{\Numerator}{\Z/gcd(\Z,\N)} 
\pgfmathtruncatemacro{\Denominator}{\N/gcd(\Z,\N)}

\ifnum \Denominator  = \Eins
    $\dfrac{\Z}{\N} = \Numerator$
\else
    $\dfrac{\Z}{\N} = \dfrac{\Numerator}{\Denominator}$ 
\fi
\bigskip

Mit tikz-math: \\
\tikzmath{%==================
int \Zaehler, \Nenner, \ggt, \Numerator, \Denominator;
\Zaehler = 6;           
\Nenner = 2;        
function GCD(\x,\y) {return gcd(\x,\y);};
\ggt = GCD(\Zaehler, \Nenner);
\Numerator = \Zaehler/\ggt;
\Denominator = \Nenner/\ggt;
if \Denominator == 1 then {
    print { $\dfrac{\Zaehler}{\Nenner} = \Numerator$};
}
else { 
    print { $\dfrac{\Zaehler}{\Nenner} = \dfrac{\Numerator}{\Denominator}  $}; 
};
}%==================

\end{document}
Permanenter link

beantwortet 02 Jan, 12:43

cis's gravatar image

cis
6.1k11135224

bearbeitet 02 Jan, 12:43

Sehr ähnlich mit Lua:

Öffne in Overleaf
\documentclass{article}
\usepackage{amsmath}
\usepackage{luacode}

\begin{luacode*}
-- https://de.wikipedia.org/wiki/Euklidischer_Algorithmus
local function gcd(a,b)
   return (b ~= 0) and gcd(b,a%b) or a
end

function reduce(a,b)
   local c = gcd(a,b)
   local a = a/c
   local b = b/c
   if (b == 1) then
      tex.sprint(a)
   else
      tex.sprint("\\frac{" .. a .. "}{" .. b .. "}")
   end
end
\end{luacode*}

\newcommand\rfrac[2]{\directlua{reduce(#1,#2)}}

\begin{document}

$\rfrac{6}{2}$
$\rfrac{17}{11}$
$\rfrac{4}{12}$

\end{document}

alt text

Permanenter link

beantwortet 02 Jan, 18:08

Henri's gravatar image

Henri
12.1k42235

bearbeitet 02 Jan, 18:10

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×549
×5
×4

Frage gestellt: 02 Jan, 10:52

Frage wurde angeschaut: 173 Mal

Zuletzt aktualisiert: 02 Jan, 18:10