When using print from lua, if the log file's current line has not been terminated then the lua tex will not start on a new line. This is very annoying because many times I search for some debug string being printed and it is not on a new line but at the end of some rather long line printed from TeX.


Printing some debug string 1
[2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]Printing another debug string 2
[14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27]`

Instead of

Printing some debug string 1
[1{C:/Users/Administrator/AppData/Local/MiKTeX/2.9/pdftex/config/pdftex.map}] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
Printing another debug string 2
[14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27]

The 2nd one is the preferred case but if I print a newline, \n, then I'll get unnecessary empty lines I do not want.

Is there any way to fix this? Basically on every entry of \directlua or whatever is used I want to print a new line ONLY if something is actually printed(so I don't get a bunch of blank lines) and, even better, only if the log file does not also end on a new line.


Use texio.write_nl(...):

texio.write_nl("Printing some debug string 1")
texio.write_nl("Printing some debug string 2")


(/opt/texlive2012/texmf-dist/tex/luatex/luatexbase/mcb.lua)))) (./test.aux)
Printing some debug string 1 [1{/opt/texlive2012/texmf-var/fonts/map/pdftex/upd
Printing some debug string 2 (./test.aux) )
 267 words of node memory still in use:

In one project I have defined a helper function:

function w( ... )
  texio.write_nl("-----> " .. string.format(...))

so that I can easily use formatted strings:

w("Printing some debug string %d",1)
| improve this answer | |

The way that seems to work really well is to keep track of print a new line initially:

\renewcommand{\directlua}[1]{\olddirectlua{print.FirstNewLine = true #1}}

and overload print so the very first time it is used it will print a new line first if FirstNewLine is true(and subsequently make it false). This has the effect of only adding a new line to the log IF text has been added from lua.

print = function (...)
    if print.FirstNewLine then rawprint.print("") print.FirstNewLine = false end

(rawprint.print is the original print routine)

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.