Different file opened by openin (was: between 2017 and 2018)
Short version:
It seems that some trivial behavior of file opening (openin
) changed between TeX Live 2017 and 2018 differs between environment. Only Overleaf one behaves differently. I did not see any notice about that, but why?
Consider the following code:
openin1 read1 to X closein1 showX
Normally openin
should be followed by a file, but here that is omitted. TeX/e-TeX/e-(u)pTeX/XeTeX/LuaTeX of Overleaf (TL2017) showed par
, but my local installation (TL2018) and Cloud LaTeX (TL2017), Japanese TeX on Web (TL2016; only e-pTeX available) shows nothing (empty).
Similar difference with e-TeX:
openin1 readline1 toXshowXreadline1 toXshowXreadline1 toXshowXclosein1 bye
e-TeX of Overleaf returned only ^^M
and stopped, but that of my local installation shows:
> X=macro:
->%%^^M.
<*> openin1 readline1 toXshowX
readline1 toXshowXreadline1 toXsho...
?
> X=macro:
->%% This is file `.tex',^^M.
<*> ...readline1 toXshowXreadline1 toXshowX
readline1 toXshowXclo...
?
> X=macro:
->%% generated with the docstrip utility.^^M.
<*> ...readline1 toXshowXreadline1 toXshowX
closein1 bye
?
No pages of output.
The followings are my guess from these behavior:
- ??? was read in Overleaf,
tools/.tex
is being read in my local installation, Cloud LaTeX
I don't think this is a problem; just for curiosity.
tex-core filesystem-access primitives
|
show 13 more comments
Short version:
It seems that some trivial behavior of file opening (openin
) changed between TeX Live 2017 and 2018 differs between environment. Only Overleaf one behaves differently. I did not see any notice about that, but why?
Consider the following code:
openin1 read1 to X closein1 showX
Normally openin
should be followed by a file, but here that is omitted. TeX/e-TeX/e-(u)pTeX/XeTeX/LuaTeX of Overleaf (TL2017) showed par
, but my local installation (TL2018) and Cloud LaTeX (TL2017), Japanese TeX on Web (TL2016; only e-pTeX available) shows nothing (empty).
Similar difference with e-TeX:
openin1 readline1 toXshowXreadline1 toXshowXreadline1 toXshowXclosein1 bye
e-TeX of Overleaf returned only ^^M
and stopped, but that of my local installation shows:
> X=macro:
->%%^^M.
<*> openin1 readline1 toXshowX
readline1 toXshowXreadline1 toXsho...
?
> X=macro:
->%% This is file `.tex',^^M.
<*> ...readline1 toXshowXreadline1 toXshowX
readline1 toXshowXclo...
?
> X=macro:
->%% generated with the docstrip utility.^^M.
<*> ...readline1 toXshowXreadline1 toXshowX
closein1 bye
?
No pages of output.
The followings are my guess from these behavior:
- ??? was read in Overleaf,
tools/.tex
is being read in my local installation, Cloud LaTeX
I don't think this is a problem; just for curiosity.
tex-core filesystem-access primitives
1
I can't reproduce the issue.
– egreg
Dec 28 '18 at 14:28
Hmm, I tested on both Linux and Mac.
– Hironobu YAMASHITA
Dec 28 '18 at 14:30
@egreg Which behavior you get?
– Hironobu YAMASHITA
Dec 28 '18 at 14:31
1
I can't reproduce difference with etex with TL2016, 2017 (MacPorts binaries), and TL2018 (self-compiled binaries). They all behave as in your question.
– jfbu
Dec 28 '18 at 14:32
1
Overleaf runs withnonstopmode
orbatchmode
, as if you tryopenin3="nonexistent.tex" read3 to X closein3
you get an error aboutcannot read from terminal in nonstop modes
(and if you try to force it witherrorstopmode
, you get "End of file on the terminal!"). So the explanation cannot be that TeX is reading from the terminal. And yetopenin1=".tex" read1 to X closein1
setsX
tomacro:->
; it's onlyopenin2 read2 to X closein2
that setsX
topar
... so if it's not reading from.tex
and it's not reading from the terminal, where is it reading from?
– ShreevatsaR
Dec 29 '18 at 1:40
|
show 13 more comments
Short version:
It seems that some trivial behavior of file opening (openin
) changed between TeX Live 2017 and 2018 differs between environment. Only Overleaf one behaves differently. I did not see any notice about that, but why?
Consider the following code:
openin1 read1 to X closein1 showX
Normally openin
should be followed by a file, but here that is omitted. TeX/e-TeX/e-(u)pTeX/XeTeX/LuaTeX of Overleaf (TL2017) showed par
, but my local installation (TL2018) and Cloud LaTeX (TL2017), Japanese TeX on Web (TL2016; only e-pTeX available) shows nothing (empty).
Similar difference with e-TeX:
openin1 readline1 toXshowXreadline1 toXshowXreadline1 toXshowXclosein1 bye
e-TeX of Overleaf returned only ^^M
and stopped, but that of my local installation shows:
> X=macro:
->%%^^M.
<*> openin1 readline1 toXshowX
readline1 toXshowXreadline1 toXsho...
?
> X=macro:
->%% This is file `.tex',^^M.
<*> ...readline1 toXshowXreadline1 toXshowX
readline1 toXshowXclo...
?
> X=macro:
->%% generated with the docstrip utility.^^M.
<*> ...readline1 toXshowXreadline1 toXshowX
closein1 bye
?
No pages of output.
The followings are my guess from these behavior:
- ??? was read in Overleaf,
tools/.tex
is being read in my local installation, Cloud LaTeX
I don't think this is a problem; just for curiosity.
tex-core filesystem-access primitives
Short version:
It seems that some trivial behavior of file opening (openin
) changed between TeX Live 2017 and 2018 differs between environment. Only Overleaf one behaves differently. I did not see any notice about that, but why?
Consider the following code:
openin1 read1 to X closein1 showX
Normally openin
should be followed by a file, but here that is omitted. TeX/e-TeX/e-(u)pTeX/XeTeX/LuaTeX of Overleaf (TL2017) showed par
, but my local installation (TL2018) and Cloud LaTeX (TL2017), Japanese TeX on Web (TL2016; only e-pTeX available) shows nothing (empty).
Similar difference with e-TeX:
openin1 readline1 toXshowXreadline1 toXshowXreadline1 toXshowXclosein1 bye
e-TeX of Overleaf returned only ^^M
and stopped, but that of my local installation shows:
> X=macro:
->%%^^M.
<*> openin1 readline1 toXshowX
readline1 toXshowXreadline1 toXsho...
?
> X=macro:
->%% This is file `.tex',^^M.
<*> ...readline1 toXshowXreadline1 toXshowX
readline1 toXshowXclo...
?
> X=macro:
->%% generated with the docstrip utility.^^M.
<*> ...readline1 toXshowXreadline1 toXshowX
closein1 bye
?
No pages of output.
The followings are my guess from these behavior:
- ??? was read in Overleaf,
tools/.tex
is being read in my local installation, Cloud LaTeX
I don't think this is a problem; just for curiosity.
tex-core filesystem-access primitives
tex-core filesystem-access primitives
edited Dec 29 '18 at 4:03
asked Dec 28 '18 at 14:08
Hironobu YAMASHITA
48437
48437
1
I can't reproduce the issue.
– egreg
Dec 28 '18 at 14:28
Hmm, I tested on both Linux and Mac.
– Hironobu YAMASHITA
Dec 28 '18 at 14:30
@egreg Which behavior you get?
– Hironobu YAMASHITA
Dec 28 '18 at 14:31
1
I can't reproduce difference with etex with TL2016, 2017 (MacPorts binaries), and TL2018 (self-compiled binaries). They all behave as in your question.
– jfbu
Dec 28 '18 at 14:32
1
Overleaf runs withnonstopmode
orbatchmode
, as if you tryopenin3="nonexistent.tex" read3 to X closein3
you get an error aboutcannot read from terminal in nonstop modes
(and if you try to force it witherrorstopmode
, you get "End of file on the terminal!"). So the explanation cannot be that TeX is reading from the terminal. And yetopenin1=".tex" read1 to X closein1
setsX
tomacro:->
; it's onlyopenin2 read2 to X closein2
that setsX
topar
... so if it's not reading from.tex
and it's not reading from the terminal, where is it reading from?
– ShreevatsaR
Dec 29 '18 at 1:40
|
show 13 more comments
1
I can't reproduce the issue.
– egreg
Dec 28 '18 at 14:28
Hmm, I tested on both Linux and Mac.
– Hironobu YAMASHITA
Dec 28 '18 at 14:30
@egreg Which behavior you get?
– Hironobu YAMASHITA
Dec 28 '18 at 14:31
1
I can't reproduce difference with etex with TL2016, 2017 (MacPorts binaries), and TL2018 (self-compiled binaries). They all behave as in your question.
– jfbu
Dec 28 '18 at 14:32
1
Overleaf runs withnonstopmode
orbatchmode
, as if you tryopenin3="nonexistent.tex" read3 to X closein3
you get an error aboutcannot read from terminal in nonstop modes
(and if you try to force it witherrorstopmode
, you get "End of file on the terminal!"). So the explanation cannot be that TeX is reading from the terminal. And yetopenin1=".tex" read1 to X closein1
setsX
tomacro:->
; it's onlyopenin2 read2 to X closein2
that setsX
topar
... so if it's not reading from.tex
and it's not reading from the terminal, where is it reading from?
– ShreevatsaR
Dec 29 '18 at 1:40
1
1
I can't reproduce the issue.
– egreg
Dec 28 '18 at 14:28
I can't reproduce the issue.
– egreg
Dec 28 '18 at 14:28
Hmm, I tested on both Linux and Mac.
– Hironobu YAMASHITA
Dec 28 '18 at 14:30
Hmm, I tested on both Linux and Mac.
– Hironobu YAMASHITA
Dec 28 '18 at 14:30
@egreg Which behavior you get?
– Hironobu YAMASHITA
Dec 28 '18 at 14:31
@egreg Which behavior you get?
– Hironobu YAMASHITA
Dec 28 '18 at 14:31
1
1
I can't reproduce difference with etex with TL2016, 2017 (MacPorts binaries), and TL2018 (self-compiled binaries). They all behave as in your question.
– jfbu
Dec 28 '18 at 14:32
I can't reproduce difference with etex with TL2016, 2017 (MacPorts binaries), and TL2018 (self-compiled binaries). They all behave as in your question.
– jfbu
Dec 28 '18 at 14:32
1
1
Overleaf runs with
nonstopmode
or batchmode
, as if you try openin3="nonexistent.tex" read3 to X closein3
you get an error about cannot read from terminal in nonstop modes
(and if you try to force it with errorstopmode
, you get "End of file on the terminal!"). So the explanation cannot be that TeX is reading from the terminal. And yet openin1=".tex" read1 to X closein1
sets X
to macro:->
; it's only openin2 read2 to X closein2
that sets X
to par
... so if it's not reading from .tex
and it's not reading from the terminal, where is it reading from?– ShreevatsaR
Dec 29 '18 at 1:40
Overleaf runs with
nonstopmode
or batchmode
, as if you try openin3="nonexistent.tex" read3 to X closein3
you get an error about cannot read from terminal in nonstop modes
(and if you try to force it with errorstopmode
, you get "End of file on the terminal!"). So the explanation cannot be that TeX is reading from the terminal. And yet openin1=".tex" read1 to X closein1
sets X
to macro:->
; it's only openin2 read2 to X closein2
that sets X
to par
... so if it's not reading from .tex
and it's not reading from the terminal, where is it reading from?– ShreevatsaR
Dec 29 '18 at 1:40
|
show 13 more comments
1 Answer
1
active
oldest
votes
A few observations:
As of now, it appears that the atypical behaviour can be reproduced only on Overleaf, though an earlier version of the question mentioned the OP's observations on TL 2017 and on Japanese TeX on Web.
On Overleaf, this behaviour (where
X
gets set topar
) can be reproduced not only withopenin1 read1 to X
(as in the question) but even withopenin1= read1 to X
andopenin1="" read1 to X
, but not withopenin1=".tex" read1 to X
(in which caseX
gets set to the empty macro, same as on other environments). In fact, withverbatiminput{.tex}
(compiling with LaTeX andusepackage{verbatim}
), one can see that even on Overleaf, the same.tex
file is present, which we see loaded on other environments (texmf-dist/tex/latex/tools/.tex
). (This is interesting, that reading from""
is not the same as reading from".tex"
.) So with that explanation ruled out, let's stick to thisopenin1="" read1 to X
form as it's perhaps most clear.Sometimes
read
tries to read from the terminal, so this is another potential explanation. But if we tryopenin1="nonexistent.tex" read1 to X
on Overleaf, we get a message from TeX about “cannot read from terminal in nonstop modes
”, suggesting that TeX is being run withbatchmode
ornonstopmode
. Even if we try to force the issue by first doingerrorstopmode
in our file, we get “End of file on the terminal!
”. So this explanation is ruled out as well, which only deepens the mystery: if TeX is not reading from the file.tex
and it's not reading from the terminal, where is it reading from?
Based on these observations, we can debug as follows: create a latexmkrc
file containing
$latex = 'tex -recorder %O %S';
to record this, and prepare the following input file:
openin 1=".tex"
read 1 to X
message{... With full filename, meaningX ...}
closein 1
openin 2=""
read 2 to X
message{... With blank filename, meaningX ...}
closein 2
openin 3=".tex"
read 3 to X
message{... With full filename, meaningX ...}
closein 3
obeylines
input jobname.fls
bye
(3 is the same as 1, just repeated to make the ordering clear). The log file contains:
This is TeX, Version 3.14159265 (TeX Live 2017) (preloaded format=tex 2017.7.12) 29 DEC 2018 10:20
**main.tex
(/compile/main.tex ... With full filename, macro:->... ... With blank filename,
macro:->par ... ... With full filename, macro:->... (/compile/output.fls) [1]
)
Output written on /compile/output.dvi (1 page, 716 bytes).
which illustrates the oddity, but even more interesting is the typeset output:
PWD /compile
INPUT /usr/local/texlive/2017/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-dist/web2c/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-var/web2c/tex/tex.fmt
INPUT /compile/main.tex
OUTPUT /compile/output.log
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/output.fls
-- note the INPUT /compile/
between the two occurrences of INPUTing .tex
.
This seems to answer the mystery somewhat, while raising new ones: why does TeX (on Overleaf, and when given an empty filename) input (what appears to be) the directory containing the input file? (And what does it even mean to input a directory / why is the effect the same as reading an empty file?)
Unfortunately this is all very much in the system-dependent parts of TeX (i.e. in this case it's entirely internal to the kpathsea library), so to debug further without being able to reproduce locally seems hard. (Perhaps it has something do with chroot or some sort of sandboxing that Overleaf does.) I'll note though that there was a kpathsea
commit on 2017-11-03 (so wasn't part of TL2017) that has something to do with empty filenames. Perhaps it's related.
Thanks, it never occurred to me that the directory being read! For now we cannot reproduce the issue locally, I take this answer.
– Hironobu YAMASHITA
Dec 29 '18 at 13:58
@HironobuYAMASHITA But I do not find it possible to read a directory, in my local TeX... may be something interesting worth asking the kpathsea people (texlive mailing list?)
– ShreevatsaR
Dec 29 '18 at 20:07
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%2f467666%2fdifferent-file-opened-by-openin-was-between-2017-and-2018%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
A few observations:
As of now, it appears that the atypical behaviour can be reproduced only on Overleaf, though an earlier version of the question mentioned the OP's observations on TL 2017 and on Japanese TeX on Web.
On Overleaf, this behaviour (where
X
gets set topar
) can be reproduced not only withopenin1 read1 to X
(as in the question) but even withopenin1= read1 to X
andopenin1="" read1 to X
, but not withopenin1=".tex" read1 to X
(in which caseX
gets set to the empty macro, same as on other environments). In fact, withverbatiminput{.tex}
(compiling with LaTeX andusepackage{verbatim}
), one can see that even on Overleaf, the same.tex
file is present, which we see loaded on other environments (texmf-dist/tex/latex/tools/.tex
). (This is interesting, that reading from""
is not the same as reading from".tex"
.) So with that explanation ruled out, let's stick to thisopenin1="" read1 to X
form as it's perhaps most clear.Sometimes
read
tries to read from the terminal, so this is another potential explanation. But if we tryopenin1="nonexistent.tex" read1 to X
on Overleaf, we get a message from TeX about “cannot read from terminal in nonstop modes
”, suggesting that TeX is being run withbatchmode
ornonstopmode
. Even if we try to force the issue by first doingerrorstopmode
in our file, we get “End of file on the terminal!
”. So this explanation is ruled out as well, which only deepens the mystery: if TeX is not reading from the file.tex
and it's not reading from the terminal, where is it reading from?
Based on these observations, we can debug as follows: create a latexmkrc
file containing
$latex = 'tex -recorder %O %S';
to record this, and prepare the following input file:
openin 1=".tex"
read 1 to X
message{... With full filename, meaningX ...}
closein 1
openin 2=""
read 2 to X
message{... With blank filename, meaningX ...}
closein 2
openin 3=".tex"
read 3 to X
message{... With full filename, meaningX ...}
closein 3
obeylines
input jobname.fls
bye
(3 is the same as 1, just repeated to make the ordering clear). The log file contains:
This is TeX, Version 3.14159265 (TeX Live 2017) (preloaded format=tex 2017.7.12) 29 DEC 2018 10:20
**main.tex
(/compile/main.tex ... With full filename, macro:->... ... With blank filename,
macro:->par ... ... With full filename, macro:->... (/compile/output.fls) [1]
)
Output written on /compile/output.dvi (1 page, 716 bytes).
which illustrates the oddity, but even more interesting is the typeset output:
PWD /compile
INPUT /usr/local/texlive/2017/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-dist/web2c/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-var/web2c/tex/tex.fmt
INPUT /compile/main.tex
OUTPUT /compile/output.log
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/output.fls
-- note the INPUT /compile/
between the two occurrences of INPUTing .tex
.
This seems to answer the mystery somewhat, while raising new ones: why does TeX (on Overleaf, and when given an empty filename) input (what appears to be) the directory containing the input file? (And what does it even mean to input a directory / why is the effect the same as reading an empty file?)
Unfortunately this is all very much in the system-dependent parts of TeX (i.e. in this case it's entirely internal to the kpathsea library), so to debug further without being able to reproduce locally seems hard. (Perhaps it has something do with chroot or some sort of sandboxing that Overleaf does.) I'll note though that there was a kpathsea
commit on 2017-11-03 (so wasn't part of TL2017) that has something to do with empty filenames. Perhaps it's related.
Thanks, it never occurred to me that the directory being read! For now we cannot reproduce the issue locally, I take this answer.
– Hironobu YAMASHITA
Dec 29 '18 at 13:58
@HironobuYAMASHITA But I do not find it possible to read a directory, in my local TeX... may be something interesting worth asking the kpathsea people (texlive mailing list?)
– ShreevatsaR
Dec 29 '18 at 20:07
add a comment |
A few observations:
As of now, it appears that the atypical behaviour can be reproduced only on Overleaf, though an earlier version of the question mentioned the OP's observations on TL 2017 and on Japanese TeX on Web.
On Overleaf, this behaviour (where
X
gets set topar
) can be reproduced not only withopenin1 read1 to X
(as in the question) but even withopenin1= read1 to X
andopenin1="" read1 to X
, but not withopenin1=".tex" read1 to X
(in which caseX
gets set to the empty macro, same as on other environments). In fact, withverbatiminput{.tex}
(compiling with LaTeX andusepackage{verbatim}
), one can see that even on Overleaf, the same.tex
file is present, which we see loaded on other environments (texmf-dist/tex/latex/tools/.tex
). (This is interesting, that reading from""
is not the same as reading from".tex"
.) So with that explanation ruled out, let's stick to thisopenin1="" read1 to X
form as it's perhaps most clear.Sometimes
read
tries to read from the terminal, so this is another potential explanation. But if we tryopenin1="nonexistent.tex" read1 to X
on Overleaf, we get a message from TeX about “cannot read from terminal in nonstop modes
”, suggesting that TeX is being run withbatchmode
ornonstopmode
. Even if we try to force the issue by first doingerrorstopmode
in our file, we get “End of file on the terminal!
”. So this explanation is ruled out as well, which only deepens the mystery: if TeX is not reading from the file.tex
and it's not reading from the terminal, where is it reading from?
Based on these observations, we can debug as follows: create a latexmkrc
file containing
$latex = 'tex -recorder %O %S';
to record this, and prepare the following input file:
openin 1=".tex"
read 1 to X
message{... With full filename, meaningX ...}
closein 1
openin 2=""
read 2 to X
message{... With blank filename, meaningX ...}
closein 2
openin 3=".tex"
read 3 to X
message{... With full filename, meaningX ...}
closein 3
obeylines
input jobname.fls
bye
(3 is the same as 1, just repeated to make the ordering clear). The log file contains:
This is TeX, Version 3.14159265 (TeX Live 2017) (preloaded format=tex 2017.7.12) 29 DEC 2018 10:20
**main.tex
(/compile/main.tex ... With full filename, macro:->... ... With blank filename,
macro:->par ... ... With full filename, macro:->... (/compile/output.fls) [1]
)
Output written on /compile/output.dvi (1 page, 716 bytes).
which illustrates the oddity, but even more interesting is the typeset output:
PWD /compile
INPUT /usr/local/texlive/2017/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-dist/web2c/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-var/web2c/tex/tex.fmt
INPUT /compile/main.tex
OUTPUT /compile/output.log
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/output.fls
-- note the INPUT /compile/
between the two occurrences of INPUTing .tex
.
This seems to answer the mystery somewhat, while raising new ones: why does TeX (on Overleaf, and when given an empty filename) input (what appears to be) the directory containing the input file? (And what does it even mean to input a directory / why is the effect the same as reading an empty file?)
Unfortunately this is all very much in the system-dependent parts of TeX (i.e. in this case it's entirely internal to the kpathsea library), so to debug further without being able to reproduce locally seems hard. (Perhaps it has something do with chroot or some sort of sandboxing that Overleaf does.) I'll note though that there was a kpathsea
commit on 2017-11-03 (so wasn't part of TL2017) that has something to do with empty filenames. Perhaps it's related.
Thanks, it never occurred to me that the directory being read! For now we cannot reproduce the issue locally, I take this answer.
– Hironobu YAMASHITA
Dec 29 '18 at 13:58
@HironobuYAMASHITA But I do not find it possible to read a directory, in my local TeX... may be something interesting worth asking the kpathsea people (texlive mailing list?)
– ShreevatsaR
Dec 29 '18 at 20:07
add a comment |
A few observations:
As of now, it appears that the atypical behaviour can be reproduced only on Overleaf, though an earlier version of the question mentioned the OP's observations on TL 2017 and on Japanese TeX on Web.
On Overleaf, this behaviour (where
X
gets set topar
) can be reproduced not only withopenin1 read1 to X
(as in the question) but even withopenin1= read1 to X
andopenin1="" read1 to X
, but not withopenin1=".tex" read1 to X
(in which caseX
gets set to the empty macro, same as on other environments). In fact, withverbatiminput{.tex}
(compiling with LaTeX andusepackage{verbatim}
), one can see that even on Overleaf, the same.tex
file is present, which we see loaded on other environments (texmf-dist/tex/latex/tools/.tex
). (This is interesting, that reading from""
is not the same as reading from".tex"
.) So with that explanation ruled out, let's stick to thisopenin1="" read1 to X
form as it's perhaps most clear.Sometimes
read
tries to read from the terminal, so this is another potential explanation. But if we tryopenin1="nonexistent.tex" read1 to X
on Overleaf, we get a message from TeX about “cannot read from terminal in nonstop modes
”, suggesting that TeX is being run withbatchmode
ornonstopmode
. Even if we try to force the issue by first doingerrorstopmode
in our file, we get “End of file on the terminal!
”. So this explanation is ruled out as well, which only deepens the mystery: if TeX is not reading from the file.tex
and it's not reading from the terminal, where is it reading from?
Based on these observations, we can debug as follows: create a latexmkrc
file containing
$latex = 'tex -recorder %O %S';
to record this, and prepare the following input file:
openin 1=".tex"
read 1 to X
message{... With full filename, meaningX ...}
closein 1
openin 2=""
read 2 to X
message{... With blank filename, meaningX ...}
closein 2
openin 3=".tex"
read 3 to X
message{... With full filename, meaningX ...}
closein 3
obeylines
input jobname.fls
bye
(3 is the same as 1, just repeated to make the ordering clear). The log file contains:
This is TeX, Version 3.14159265 (TeX Live 2017) (preloaded format=tex 2017.7.12) 29 DEC 2018 10:20
**main.tex
(/compile/main.tex ... With full filename, macro:->... ... With blank filename,
macro:->par ... ... With full filename, macro:->... (/compile/output.fls) [1]
)
Output written on /compile/output.dvi (1 page, 716 bytes).
which illustrates the oddity, but even more interesting is the typeset output:
PWD /compile
INPUT /usr/local/texlive/2017/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-dist/web2c/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-var/web2c/tex/tex.fmt
INPUT /compile/main.tex
OUTPUT /compile/output.log
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/output.fls
-- note the INPUT /compile/
between the two occurrences of INPUTing .tex
.
This seems to answer the mystery somewhat, while raising new ones: why does TeX (on Overleaf, and when given an empty filename) input (what appears to be) the directory containing the input file? (And what does it even mean to input a directory / why is the effect the same as reading an empty file?)
Unfortunately this is all very much in the system-dependent parts of TeX (i.e. in this case it's entirely internal to the kpathsea library), so to debug further without being able to reproduce locally seems hard. (Perhaps it has something do with chroot or some sort of sandboxing that Overleaf does.) I'll note though that there was a kpathsea
commit on 2017-11-03 (so wasn't part of TL2017) that has something to do with empty filenames. Perhaps it's related.
A few observations:
As of now, it appears that the atypical behaviour can be reproduced only on Overleaf, though an earlier version of the question mentioned the OP's observations on TL 2017 and on Japanese TeX on Web.
On Overleaf, this behaviour (where
X
gets set topar
) can be reproduced not only withopenin1 read1 to X
(as in the question) but even withopenin1= read1 to X
andopenin1="" read1 to X
, but not withopenin1=".tex" read1 to X
(in which caseX
gets set to the empty macro, same as on other environments). In fact, withverbatiminput{.tex}
(compiling with LaTeX andusepackage{verbatim}
), one can see that even on Overleaf, the same.tex
file is present, which we see loaded on other environments (texmf-dist/tex/latex/tools/.tex
). (This is interesting, that reading from""
is not the same as reading from".tex"
.) So with that explanation ruled out, let's stick to thisopenin1="" read1 to X
form as it's perhaps most clear.Sometimes
read
tries to read from the terminal, so this is another potential explanation. But if we tryopenin1="nonexistent.tex" read1 to X
on Overleaf, we get a message from TeX about “cannot read from terminal in nonstop modes
”, suggesting that TeX is being run withbatchmode
ornonstopmode
. Even if we try to force the issue by first doingerrorstopmode
in our file, we get “End of file on the terminal!
”. So this explanation is ruled out as well, which only deepens the mystery: if TeX is not reading from the file.tex
and it's not reading from the terminal, where is it reading from?
Based on these observations, we can debug as follows: create a latexmkrc
file containing
$latex = 'tex -recorder %O %S';
to record this, and prepare the following input file:
openin 1=".tex"
read 1 to X
message{... With full filename, meaningX ...}
closein 1
openin 2=""
read 2 to X
message{... With blank filename, meaningX ...}
closein 2
openin 3=".tex"
read 3 to X
message{... With full filename, meaningX ...}
closein 3
obeylines
input jobname.fls
bye
(3 is the same as 1, just repeated to make the ordering clear). The log file contains:
This is TeX, Version 3.14159265 (TeX Live 2017) (preloaded format=tex 2017.7.12) 29 DEC 2018 10:20
**main.tex
(/compile/main.tex ... With full filename, macro:->... ... With blank filename,
macro:->par ... ... With full filename, macro:->... (/compile/output.fls) [1]
)
Output written on /compile/output.dvi (1 page, 716 bytes).
which illustrates the oddity, but even more interesting is the typeset output:
PWD /compile
INPUT /usr/local/texlive/2017/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-dist/web2c/texmf.cnf
INPUT /usr/local/texlive/2017/texmf-var/web2c/tex/tex.fmt
INPUT /compile/main.tex
OUTPUT /compile/output.log
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/
INPUT /usr/local/texlive/2017/texmf-dist/tex/latex/tools/.tex
INPUT /compile/output.fls
-- note the INPUT /compile/
between the two occurrences of INPUTing .tex
.
This seems to answer the mystery somewhat, while raising new ones: why does TeX (on Overleaf, and when given an empty filename) input (what appears to be) the directory containing the input file? (And what does it even mean to input a directory / why is the effect the same as reading an empty file?)
Unfortunately this is all very much in the system-dependent parts of TeX (i.e. in this case it's entirely internal to the kpathsea library), so to debug further without being able to reproduce locally seems hard. (Perhaps it has something do with chroot or some sort of sandboxing that Overleaf does.) I'll note though that there was a kpathsea
commit on 2017-11-03 (so wasn't part of TL2017) that has something to do with empty filenames. Perhaps it's related.
answered Dec 29 '18 at 10:57
ShreevatsaR
27.2k87198
27.2k87198
Thanks, it never occurred to me that the directory being read! For now we cannot reproduce the issue locally, I take this answer.
– Hironobu YAMASHITA
Dec 29 '18 at 13:58
@HironobuYAMASHITA But I do not find it possible to read a directory, in my local TeX... may be something interesting worth asking the kpathsea people (texlive mailing list?)
– ShreevatsaR
Dec 29 '18 at 20:07
add a comment |
Thanks, it never occurred to me that the directory being read! For now we cannot reproduce the issue locally, I take this answer.
– Hironobu YAMASHITA
Dec 29 '18 at 13:58
@HironobuYAMASHITA But I do not find it possible to read a directory, in my local TeX... may be something interesting worth asking the kpathsea people (texlive mailing list?)
– ShreevatsaR
Dec 29 '18 at 20:07
Thanks, it never occurred to me that the directory being read! For now we cannot reproduce the issue locally, I take this answer.
– Hironobu YAMASHITA
Dec 29 '18 at 13:58
Thanks, it never occurred to me that the directory being read! For now we cannot reproduce the issue locally, I take this answer.
– Hironobu YAMASHITA
Dec 29 '18 at 13:58
@HironobuYAMASHITA But I do not find it possible to read a directory, in my local TeX... may be something interesting worth asking the kpathsea people (texlive mailing list?)
– ShreevatsaR
Dec 29 '18 at 20:07
@HironobuYAMASHITA But I do not find it possible to read a directory, in my local TeX... may be something interesting worth asking the kpathsea people (texlive mailing list?)
– ShreevatsaR
Dec 29 '18 at 20:07
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f467666%2fdifferent-file-opened-by-openin-was-between-2017-and-2018%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
1
I can't reproduce the issue.
– egreg
Dec 28 '18 at 14:28
Hmm, I tested on both Linux and Mac.
– Hironobu YAMASHITA
Dec 28 '18 at 14:30
@egreg Which behavior you get?
– Hironobu YAMASHITA
Dec 28 '18 at 14:31
1
I can't reproduce difference with etex with TL2016, 2017 (MacPorts binaries), and TL2018 (self-compiled binaries). They all behave as in your question.
– jfbu
Dec 28 '18 at 14:32
1
Overleaf runs with
nonstopmode
orbatchmode
, as if you tryopenin3="nonexistent.tex" read3 to X closein3
you get an error aboutcannot read from terminal in nonstop modes
(and if you try to force it witherrorstopmode
, you get "End of file on the terminal!"). So the explanation cannot be that TeX is reading from the terminal. And yetopenin1=".tex" read1 to X closein1
setsX
tomacro:->
; it's onlyopenin2 read2 to X closein2
that setsX
topar
... so if it's not reading from.tex
and it's not reading from the terminal, where is it reading from?– ShreevatsaR
Dec 29 '18 at 1:40