TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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.

share|improve this question

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)
share|improve this answer
up vote 0 down vote accepted

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)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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