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 '18, 16:36

cis's gravatar image

cis
9.4k23257465
Akzeptiert-Rate: 29%

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 '18, 17: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 '18, 22: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 '18, 23: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...

(22 Okt '18, 00: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 '18, 08:55

Ulrike%20Fischer's gravatar image

Ulrike Fischer
3.4k23
Akzeptiert-Rate: 51%

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

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

×12
×3

gestellte Frage: 21 Okt '18, 16:36

Frage wurde gesehen: 1,450 Mal

zuletzt geändert: 22 Okt '18, 16:28