Wie kann ich bei

\pgfmathfloatifflags{<floating point number>}{<flag>}{<true-code>}{<false-code>}

auch Sachen wie \frac32 testen? Ich erhalte den Fehler 'protect'. Das ist doch bestimmt wieder etwas mit "noexpand" usw.

alt text

Öffne in Overleaf
\documentclass[border=3mm, varwidth]{standalone}
\usepackage{tikz, amsmath}
\usepgflibrary{fpu}

% Das braucht man scheints:
\pgfkeys{/pgf/fpu/handlers/invalid number/.code={%
%  \pgfmathfloatparsenumber{3Y0.0e0]}%
  \pgfmathresult
  }
}

\begin{document}
12.3: \pgfmathfloatparsenumber{12.3}
\pgfmathfloatifflags{\pgfmathresult}{3}{string}{kein string}

abc: \pgfmathfloatparsenumber{abc}
\pgfmathfloatifflags{\pgfmathresult}{3}{string}{kein string}

\verb+$\frac32$+ geht: \pgfmathfloatparsenumber{$\frac32$}
\pgfmathfloatifflags{\pgfmathresult}{3}{string}{kein string}

\verb+\frac32+ geht nicht: %\pgfmathfloatparsenumber{\frac32} %error
%\pgfmathfloatifflags{\pgfmathresult}{3}{string}{kein string}

\bigskip
\tiny\verb+\pgfmathfloatifflags{<floating point number>}{<flag>}{<true-code>}{<false-code>}+ \\
$\begin{array}{c | c}
\text{Flag} & \text{Meaning} \\ \hline
0     &  0                       \\
1     &  \text{positive}    \\
2     &  \text{negative}    \\
3     &  \text{NaN}          \\
4     &  \infty                  \\
5     &  -\infty                 \\
\end{array}$
\end{document}

gefragt 21 Okt, 10:36

cis's gravatar image

cis
8.3k16171267
Akzeptiert: 68%

2

wieso verbeißt du dich bloß so in pgf-Lösungen? Die Mathematik-Bibliothek ist nicht total schlecht, aber doch objektiv schlechter als l3fp. Siehe z.B. https://tex.stackexchange.com/a/417717/2388. Und was deine Tests angeht: in expl3 sind reguläre Ausdrücke möglich. Damit ist dein Test mehr oder weniger ein trivial.

(21 Okt, 11:45) Ulrike Fischer

"wieso verbeißt du dich bloß so in pgf-Lösungen". Weil es geil ist, weil es elegant ist im Paket zu bleiben und aus Gründen, die ich nicht verrate; aber primär die ersten beiden Gründe.

(21 Okt, 16:33) cis
1

Wenn es so elegant ist, warum beklagst du dich dann in jeder zweiten Frage über nötige low-level Hacks? Und warum versuchst du einen math-Befehl dazu zu bringen mit Argumenten umzugehen, für die er nicht geschrieben wurde?

(21 Okt, 17:51) Ulrike Fischer

Hier https://texwelt.de/wissen/fragen/23415/pgfmath-funktion-gesucht-die-strings-und-zahlen-verarbeiten-kann funktioniert es ja an sich, man darf bloß nicht \frac32, sondern nur $\frac32$ reingeben (und dort ist es auch kein Hack, sondern normale Benutzung einer Paketfunktion). Diese Frage hier, weil ich dachte, da fehlt irgendein Beisatz, wie expandafter oder sowas... expl3 kann ich nicht, abgesehen davon ist die Syntax davon für mich -leider- alles andere als selbsterklärend. Jene von pgfmath dagegen schon und wenn es damit prinzipiell geht, warum nicht auch verwenden...

(21 Okt, 18:47) cis

\pgfmathfloatparsenumber ist für sowas nicht gemacht. Es kommt mit einigen nicht-Zahlen ganz gut zurecht, aber nicht mit mehr oder weniger beliebigen Input.

Hier eine Umsetzung eines solchen Test mit expl3. Über den regulären Ausdruck kann man ggfs. anpassen, was als Zahl gilt und was nicht.

Öffne in Overleaf
\documentclass{article}

\usepackage{xparse}
\begin{document}
\ExplSyntaxOn

\regex_new:N  \l_cis_isnumber_regex
\regex_set:Nn \l_cis_isnumber_regex {\A[\+\-\ ]*(\d+|\d*\.\d+)\ *\Z}

\cs_new_protected:Nn \cis_testnumber:n
 {
   \regex_match:NnTF \l_cis_isnumber_regex { #1 }
    {
      \fp_compare:nTF
       { #1 < 0 }
       { negative ~ number}
       { 
        \fp_compare:nTF
         { #1 = 0 }
         { zero }
         { positive ~ number}
       }  
    }
    {
      string
    }
 }

\NewDocumentCommand \cistestnumber { m }
 {
  \cis_testnumber:n { #1 }
 } 
\ExplSyntaxOff

\noindent
\cistestnumber {  12345  }
\\
\cistestnumber {123.45}
\\
\cistestnumber {x12345}
\\
\cistestnumber {12345.} %derzeit string
\\
\cistestnumber {\frac{123}{45}}
\\
\cistestnumber{$\frac{123}{435}$}
\\
\cistestnumber {-12.345}
\\
\cistestnumber {.1}
\\
\cistestnumber {0}
\\
\cistestnumber {0.0}

\end{document}

alt text

Permanenter link

beantwortet 22 Okt, 02:55

Ulrike%20Fischer's gravatar image

Ulrike Fischer
2.7k13

Ja, das berüchtigte cis-Kommando - das hat es in sich :()

(22 Okt, 10:28) cis
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:

×7
×3

Frage gestellt: 21 Okt, 10:36

Frage wurde angeschaut: 144 Mal

Zuletzt aktualisiert: 22 Okt, 10:28