Siunitx: Wrong parse in S-column tabular
Multiple uses of a text file containing numbers include a representation in a table. I read the file line by line and save those in a macro for a later use in a table. I use the S
-column specifier of siunitx
to format those numbers. Unfortunately, the occasionally present exponents are not parsed, i.e. the mantissa is parsed, but the exponents still remain in the output with some space.
If I explicitely use num{line}
instead, all is done perfectly (except, commas are not placed below each other). So, what's wrong here?
$pdflatex -shell-escape main.tex
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
Minimal example:
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+1,
round-mode=places,
}
makeatletter
newreadinfile
defpreparetable#1{
@bsphack
bgroup
openininfile=#1
let\=relax
newcountlinecnt
gdefusetable{}
endlinechar=-1
@whileswunlessifeofinfilefi{%
advancelinecnt by @ne
readlineinfile to line
ifrelaxlinerelaxelse
xdefusetable{usetable thelinecnt & line \}
fi
}
egroup
@esphack
}
makeatother
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
preparetable{test.test}
usetable
end{tabular}
end{document}
and an example file:
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
siunitx
add a comment |
Multiple uses of a text file containing numbers include a representation in a table. I read the file line by line and save those in a macro for a later use in a table. I use the S
-column specifier of siunitx
to format those numbers. Unfortunately, the occasionally present exponents are not parsed, i.e. the mantissa is parsed, but the exponents still remain in the output with some space.
If I explicitely use num{line}
instead, all is done perfectly (except, commas are not placed below each other). So, what's wrong here?
$pdflatex -shell-escape main.tex
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
Minimal example:
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+1,
round-mode=places,
}
makeatletter
newreadinfile
defpreparetable#1{
@bsphack
bgroup
openininfile=#1
let\=relax
newcountlinecnt
gdefusetable{}
endlinechar=-1
@whileswunlessifeofinfilefi{%
advancelinecnt by @ne
readlineinfile to line
ifrelaxlinerelaxelse
xdefusetable{usetable thelinecnt & line \}
fi
}
egroup
@esphack
}
makeatother
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
preparetable{test.test}
usetable
end{tabular}
end{document}
and an example file:
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
siunitx
add a comment |
Multiple uses of a text file containing numbers include a representation in a table. I read the file line by line and save those in a macro for a later use in a table. I use the S
-column specifier of siunitx
to format those numbers. Unfortunately, the occasionally present exponents are not parsed, i.e. the mantissa is parsed, but the exponents still remain in the output with some space.
If I explicitely use num{line}
instead, all is done perfectly (except, commas are not placed below each other). So, what's wrong here?
$pdflatex -shell-escape main.tex
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
Minimal example:
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+1,
round-mode=places,
}
makeatletter
newreadinfile
defpreparetable#1{
@bsphack
bgroup
openininfile=#1
let\=relax
newcountlinecnt
gdefusetable{}
endlinechar=-1
@whileswunlessifeofinfilefi{%
advancelinecnt by @ne
readlineinfile to line
ifrelaxlinerelaxelse
xdefusetable{usetable thelinecnt & line \}
fi
}
egroup
@esphack
}
makeatother
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
preparetable{test.test}
usetable
end{tabular}
end{document}
and an example file:
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
siunitx
Multiple uses of a text file containing numbers include a representation in a table. I read the file line by line and save those in a macro for a later use in a table. I use the S
-column specifier of siunitx
to format those numbers. Unfortunately, the occasionally present exponents are not parsed, i.e. the mantissa is parsed, but the exponents still remain in the output with some space.
If I explicitely use num{line}
instead, all is done perfectly (except, commas are not placed below each other). So, what's wrong here?
$pdflatex -shell-escape main.tex
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian)
Minimal example:
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+1,
round-mode=places,
}
makeatletter
newreadinfile
defpreparetable#1{
@bsphack
bgroup
openininfile=#1
let\=relax
newcountlinecnt
gdefusetable{}
endlinechar=-1
@whileswunlessifeofinfilefi{%
advancelinecnt by @ne
readlineinfile to line
ifrelaxlinerelaxelse
xdefusetable{usetable thelinecnt & line \}
fi
}
egroup
@esphack
}
makeatother
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
preparetable{test.test}
usetable
end{tabular}
end{document}
and an example file:
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
siunitx
siunitx
edited 12 hours ago
camelCase
asked 13 hours ago
camelCasecamelCase
456
456
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You should use read
and not readline
, which assigns the wrong category code to e
. You also had many spurious spaces in the preparetable
macro definition.
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
makeatletter
newreadinfile
defpreparetable#1{%
@bsphack
bgroup
openininfile=#1relax
let\=relax
newcountlinecnt
gdefusetable{}%
endlinechar=-1
@whileswunlessifeofinfilefi{%
advancelinecnt by @ne
readinfile to line
ifrelaxlinerelaxelse
xdefusetable{usetable thelinecnt & line \}%
fi
}%
egroup
@esphack
}
makeatother
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
preparetable{jobname.dat}
usetable
end{tabular}
end{document}
The mandatory expl3
version:
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
ExplSyntaxOn
NewDocumentCommand{maketable}{m}
{
camelcase_table_make:n { #1 }
}
tl_new:N g_camelcase_table_body_tl
tl_new:N l__camelcase_table_entry_tl
int_new:N l_camelcase_table_row_int
ior_new:N g_camelcase_table_stream
cs_new_protected:Nn camelcase_table_make:n
{
int_zero:N l_camelcase_table_row_int
ior_open:Nn g_camelcase_table_stream { #1 }
tl_build_gbegin:N g_camelcase_table_body_tl
ior_map_variable:NNn g_camelcase_table_stream l__camelcase_table_entry_tl
{
int_incr:N l_camelcase_table_row_int
tl_build_gput_right:Nx g_camelcase_table_body_tl
{
int_to_arabic:n { l_camelcase_table_row_int }
&
exp_not:V l__camelcase_table_entry_tl
exp_not:N \
}
}
tl_build_gend:N g_camelcase_table_body_tl
tl_use:N g_camelcase_table_body_tl
}
ExplSyntaxOff
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
maketable{jobname.dat}
end{tabular}
end{document}
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "85"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f470565%2fsiunitx-wrong-parse-in-s-column-tabular%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You should use read
and not readline
, which assigns the wrong category code to e
. You also had many spurious spaces in the preparetable
macro definition.
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
makeatletter
newreadinfile
defpreparetable#1{%
@bsphack
bgroup
openininfile=#1relax
let\=relax
newcountlinecnt
gdefusetable{}%
endlinechar=-1
@whileswunlessifeofinfilefi{%
advancelinecnt by @ne
readinfile to line
ifrelaxlinerelaxelse
xdefusetable{usetable thelinecnt & line \}%
fi
}%
egroup
@esphack
}
makeatother
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
preparetable{jobname.dat}
usetable
end{tabular}
end{document}
The mandatory expl3
version:
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
ExplSyntaxOn
NewDocumentCommand{maketable}{m}
{
camelcase_table_make:n { #1 }
}
tl_new:N g_camelcase_table_body_tl
tl_new:N l__camelcase_table_entry_tl
int_new:N l_camelcase_table_row_int
ior_new:N g_camelcase_table_stream
cs_new_protected:Nn camelcase_table_make:n
{
int_zero:N l_camelcase_table_row_int
ior_open:Nn g_camelcase_table_stream { #1 }
tl_build_gbegin:N g_camelcase_table_body_tl
ior_map_variable:NNn g_camelcase_table_stream l__camelcase_table_entry_tl
{
int_incr:N l_camelcase_table_row_int
tl_build_gput_right:Nx g_camelcase_table_body_tl
{
int_to_arabic:n { l_camelcase_table_row_int }
&
exp_not:V l__camelcase_table_entry_tl
exp_not:N \
}
}
tl_build_gend:N g_camelcase_table_body_tl
tl_use:N g_camelcase_table_body_tl
}
ExplSyntaxOff
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
maketable{jobname.dat}
end{tabular}
end{document}
add a comment |
You should use read
and not readline
, which assigns the wrong category code to e
. You also had many spurious spaces in the preparetable
macro definition.
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
makeatletter
newreadinfile
defpreparetable#1{%
@bsphack
bgroup
openininfile=#1relax
let\=relax
newcountlinecnt
gdefusetable{}%
endlinechar=-1
@whileswunlessifeofinfilefi{%
advancelinecnt by @ne
readinfile to line
ifrelaxlinerelaxelse
xdefusetable{usetable thelinecnt & line \}%
fi
}%
egroup
@esphack
}
makeatother
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
preparetable{jobname.dat}
usetable
end{tabular}
end{document}
The mandatory expl3
version:
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
ExplSyntaxOn
NewDocumentCommand{maketable}{m}
{
camelcase_table_make:n { #1 }
}
tl_new:N g_camelcase_table_body_tl
tl_new:N l__camelcase_table_entry_tl
int_new:N l_camelcase_table_row_int
ior_new:N g_camelcase_table_stream
cs_new_protected:Nn camelcase_table_make:n
{
int_zero:N l_camelcase_table_row_int
ior_open:Nn g_camelcase_table_stream { #1 }
tl_build_gbegin:N g_camelcase_table_body_tl
ior_map_variable:NNn g_camelcase_table_stream l__camelcase_table_entry_tl
{
int_incr:N l_camelcase_table_row_int
tl_build_gput_right:Nx g_camelcase_table_body_tl
{
int_to_arabic:n { l_camelcase_table_row_int }
&
exp_not:V l__camelcase_table_entry_tl
exp_not:N \
}
}
tl_build_gend:N g_camelcase_table_body_tl
tl_use:N g_camelcase_table_body_tl
}
ExplSyntaxOff
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
maketable{jobname.dat}
end{tabular}
end{document}
add a comment |
You should use read
and not readline
, which assigns the wrong category code to e
. You also had many spurious spaces in the preparetable
macro definition.
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
makeatletter
newreadinfile
defpreparetable#1{%
@bsphack
bgroup
openininfile=#1relax
let\=relax
newcountlinecnt
gdefusetable{}%
endlinechar=-1
@whileswunlessifeofinfilefi{%
advancelinecnt by @ne
readinfile to line
ifrelaxlinerelaxelse
xdefusetable{usetable thelinecnt & line \}%
fi
}%
egroup
@esphack
}
makeatother
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
preparetable{jobname.dat}
usetable
end{tabular}
end{document}
The mandatory expl3
version:
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
ExplSyntaxOn
NewDocumentCommand{maketable}{m}
{
camelcase_table_make:n { #1 }
}
tl_new:N g_camelcase_table_body_tl
tl_new:N l__camelcase_table_entry_tl
int_new:N l_camelcase_table_row_int
ior_new:N g_camelcase_table_stream
cs_new_protected:Nn camelcase_table_make:n
{
int_zero:N l_camelcase_table_row_int
ior_open:Nn g_camelcase_table_stream { #1 }
tl_build_gbegin:N g_camelcase_table_body_tl
ior_map_variable:NNn g_camelcase_table_stream l__camelcase_table_entry_tl
{
int_incr:N l_camelcase_table_row_int
tl_build_gput_right:Nx g_camelcase_table_body_tl
{
int_to_arabic:n { l_camelcase_table_row_int }
&
exp_not:V l__camelcase_table_entry_tl
exp_not:N \
}
}
tl_build_gend:N g_camelcase_table_body_tl
tl_use:N g_camelcase_table_body_tl
}
ExplSyntaxOff
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
maketable{jobname.dat}
end{tabular}
end{document}
You should use read
and not readline
, which assigns the wrong category code to e
. You also had many spurious spaces in the preparetable
macro definition.
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
makeatletter
newreadinfile
defpreparetable#1{%
@bsphack
bgroup
openininfile=#1relax
let\=relax
newcountlinecnt
gdefusetable{}%
endlinechar=-1
@whileswunlessifeofinfilefi{%
advancelinecnt by @ne
readinfile to line
ifrelaxlinerelaxelse
xdefusetable{usetable thelinecnt & line \}%
fi
}%
egroup
@esphack
}
makeatother
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
preparetable{jobname.dat}
usetable
end{tabular}
end{document}
The mandatory expl3
version:
begin{filecontents*}{jobname.dat}
0.37159
0.026349
1.1273e-04
1.8199e-09
4.0825e-17
end{filecontents*}
documentclass{article}
usepackage{siunitx}
sisetup{
locale = DE,
round-precision=6,
table-format=1.6e+2,
round-mode=places,
}
ExplSyntaxOn
NewDocumentCommand{maketable}{m}
{
camelcase_table_make:n { #1 }
}
tl_new:N g_camelcase_table_body_tl
tl_new:N l__camelcase_table_entry_tl
int_new:N l_camelcase_table_row_int
ior_new:N g_camelcase_table_stream
cs_new_protected:Nn camelcase_table_make:n
{
int_zero:N l_camelcase_table_row_int
ior_open:Nn g_camelcase_table_stream { #1 }
tl_build_gbegin:N g_camelcase_table_body_tl
ior_map_variable:NNn g_camelcase_table_stream l__camelcase_table_entry_tl
{
int_incr:N l_camelcase_table_row_int
tl_build_gput_right:Nx g_camelcase_table_body_tl
{
int_to_arabic:n { l_camelcase_table_row_int }
&
exp_not:V l__camelcase_table_entry_tl
exp_not:N \
}
}
tl_build_gend:N g_camelcase_table_body_tl
tl_use:N g_camelcase_table_body_tl
}
ExplSyntaxOff
begin{document}
begin{tabular}{cS}
Schritt & {Fehler} \
maketable{jobname.dat}
end{tabular}
end{document}
edited 12 hours ago
answered 12 hours ago
egregegreg
713k8618933182
713k8618933182
add a comment |
add a comment |
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f470565%2fsiunitx-wrong-parse-in-s-column-tabular%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown