Auch hier gefragt.


Hallo! Wie erreiche ich, dass, mit Aunahme der ersten (0.1234), die Führenden Nullen "0." (nicht jedoch die Füllnullen "0.5000") in der ganzen Tabelle ausgeblendet werden?

Mit ignore chars={0.}, geht es scheints nicht. Danke!

alt text

Open in Online-Editor
%\documentclass[paper=a5]{scrartcl}
\documentclass[varwidth, border=2pt]{standalone}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\begin{document}

\begin{filecontents}{kTest2.txt}
0 0.1234 0.1000
1 0.5500 0.532
2 0.0789 0.75
\end{filecontents}

\pgfplotstableset{
fixed zerofill, precision=4,
%ignore chars={.0}, 
columns/0/.style = {column name = k, precision=0},
columns/1/.style = {column name = p},
columns/2/.style = {column name = q},
}%%

\pgfplotstabletypeset[columns = {0,1,2}]{kTest2.txt}

\end{document}

gefragt 20 Jan '16, 03:12

cis's gravatar image

cis
9.5k95459491
Akzeptiert-Rate: 29%

bearbeitet 20 Jan '16, 17:22

saputello's gravatar image

saputello
11.1k174365


Es gibt den Key skip 0. für \pgfmathprintnumber. Dieser mach fast genau das, was gewünscht ist, allerdings für alle Zellen. Der Key speichert seinen Wahrheitswert in \ifpgfmathprintnumberskipzeroperiod. Diesen setzt man einfach nach der ersten Zelle auf true. Damit die nächste Tabelle nicht beeinflusst wird, sollte er danach auf false zurückgesetzt werden. Um 0.zu ersetzen bedarf es etwas mehr Arbeit, da man die Funktionsweise von \pgfmathprintnumber anpassen muss. Dazu habe ich \ifpgfmathprintnumberskipperiodandaddphantom eingeführt, was statt dem Dezimaltrenner \phantom{0.}ausgibt.

N.B.: Um ehrlich zu sein sehe ich den Absicht dahinter nicht. Für mich macht die Notation keinen Sinn und verwirrt zudem. Warum ist der erste Wert 0.1234 und der zweite 5500? Ich bin mir absolut sicher, dass die Mehrzahl der Leser nicht kapiert, dass die 5500 nur die Nachkommastellen sein sollen.

Open in Online-Editor
%\documentclass[paper=a5]{scrartcl}
\documentclass[varwidth, border=2pt]{standalone}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\begin{document}

\begin{filecontents}{kTest2.txt}
0 0.1234 0.1000
1 0.5500 0.532
2 0.0789 0.75
\end{filecontents}

\makeatletter
\newif\ifpgfmathprintnumberskipzeroperiodandaddphantom
\def\pgfmathprintnumber@fixed@styleDEFAULT@impl@period#1.#2\pgfmathfloat@EOI{%
    \ifpgfmathprintnumberskipzeroperiodandaddphantom
      \pgfmathprintnumberskipzeroperiodtrue
    \fi
    \ifpgfmathprintnumberskipzeroperiod
        \def\pgfmathfloat@loc@TMPb{#1}%
        \ifx\pgfmathfloatparsenumber@tok@ZERO\pgfmathfloat@loc@TMPb
        \else
            \def\pgfmathfloat@loc@TMPc{-0}%
            \ifx\pgfmathfloat@loc@TMPc\pgfmathfloat@loc@TMPb
                \def\pgfmathresult{-}%
            \else
                \def\pgfmathfloat@loc@TMPc{+0}%
                \ifx\pgfmathfloat@loc@TMPc\pgfmathfloat@loc@TMPb
                    \def\pgfmathresult{+}%
                \else
                    \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod#1\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI
                \fi
            \fi
        \fi
    \else
        \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod#1\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI
    \fi
    \ifpgfmathprintnumber@thousand@sep@in@fractional
        \let\pgfmathresultfractional\pgfutil@empty%
        \pgfmathprintnumber@thousand@sep@in@fractional#2MMMM\@@
    \else
        \def\pgfmathresultfractional{#2}%
    \fi
    \begingroup
    \toks0=\expandafter{\pgfmathresult}%
    \toks1=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP@MARK}%
    \ifpgfmathprintnumberskipzeroperiodandaddphantom
    \toks2=\expandafter{\expandafter\phantom\expandafter{\expandafter0\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP}}
    \else
    \toks2=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP}%
    \fi
    \toks3=\expandafter{\pgfmathresultfractional}%
    \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 \the\toks2 \the\toks3 }%
    \endgroup
    \let\pgfmathresult=\pgfmathfloat@glob@TMP
}%
\makeatother

\pgfplotstableset{
  skip 0. for all but first/.style = {
    postproc cell content/.code={
      \ifnum\pgfplotstablecol>0
        \global\pgfmathprintnumberskipzeroperiodandaddphantomtrue
      \fi
    }
  },
}

\pgfplotstableset{
fixed zerofill, precision=4, skip 0. for all but first,
columns/0/.style = {column name = k, precision=0},
columns/1/.style = {column name = p},
columns/2/.style = {column name = q},
}%%

\pgfplotstabletypeset[columns = {0,1,2}]{kTest2.txt}

%\pgfmathprintnumberskipzeroperiodandaddphantomfalse % reenable decial separator

\end{document}

alt text

Permanenter link

beantwortet 20 Jan '16, 22:21

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 21 Jan '16, 11:11

saputello's gravatar image

saputello
11.1k174365

Ach Du meine Güte, das sah gestern noch halbwegs harmlos aus :()

BTW: Es ist üblich, die Führenden Nullen wegzulassen und nur die sogen. Signifikanten Stellen anzugeben; zumal in dieser Tabelle überall Null-Komma vorne drann steht. Die allererste Null soll bei mir bleiben; das dient als Erläuterung.

(21 Jan '16, 13:19) cis

In meiner Tabelle werden übrigens alle Nullen beseitigt, auch die erste.

(21 Jan '16, 13:25) cis

@cis: Das Beispiel von Henri gibt definitiv das aus, was er auch in der Abbildung gezeigt hat. Wo das Weglassen der Nullen üblich ist, würde mich durchaus auch interessieren. Ich habe das noch nie irgendwo gesehen. Ich würde fast darauf tippen, dass das Weglassen der Faulheit des Autors oder des Setzers geschuldet ist. Das wäre dann so ähnlich wie mit Abkürzungen, die man aus Faulheit gerne verwendet, die aber dem guten Schreibstil widersprechen.

(21 Jan '16, 13:43) saputello

Siehe z.B. hier: http://www.informatik.uni-bremen.de/~shahn/mathematik/stochastik/binomial_tabelle.PDF

Ich kann auch noch zwei, und wenn ich länger suche, sicher mehr, Bücher abfotographieren. Da alle Werte mit Null-Komma beginnen, lässt man diese Angabe oft weg.

(21 Jan '16, 16:28) cis

Was muss ich ändern, wenn deiese Regel ab der 3 Spalte angewendet werden soll?

(22 Jan '16, 00:39) cis

Wenn man z.B. \pgfplotstabletypeset[columns = {0,0,1,2}]{kTest2.txt} ausgibt, tut es nimmer.

(22 Jan '16, 03:45) cis

Ok, ich muss bei mir \ifnum\pgfplotstablecol>1 ändern.

(22 Jan '16, 17:42) cis
Ergebnis 5 von 7 show 2 more comments
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:

×256
×39

gestellte Frage: 20 Jan '16, 03:12

Frage wurde gesehen: 7,352 Mal

zuletzt geändert: 22 Jan '16, 17:42