Hi Rudolf,
On 15 Oct 2019, at 00:50, Rudolf Bahr
wrote: Now to your suggestion not to use "assert ()". Indeed it's a solution! My program works! I append again its output (again just for fun!). Did you really try it or has it been just an idea?
First, let me say that embedded lua versions are typically a little bit different from standalone. Just how much different depends on the embedding program. Luatex is actually pretty close to standalone lua. Luatex adds a bunch of extension libraries, but it changes very little of the core language. And all those changes are documented in the luatex manual. None of those changes affect your minimal example, except that lua errors are handled a little differently. Note that standalone lua *also* produces an error, as that is what assert() is supposed to do. And when lua runs into an error, it ignores the rest of the current chunk: “... whenever an error occurs, Lua ends the current chunk and returns to the application.” (from lua.org) Standalone lua typically sees only one chunk (the file you pass on the command line) but embedded lua implementation often see (sometimes many) more chunks. In luatex’s case, each \directlua is a separate chunk (in ConTeXt, that means every \startluacode block and every \ctxlua call is a separate chunk). The only unusual thing here is that standalone lua silently quits and returns a non-zero exit code to the shell, whereas luatex gives you the typical TeX-style error prompt. The rationale for that is: lua errors can happen in many places in your input file, and if they were silently ignored, your typeset pages could be wrong without you realising it. And to answer your question above: I did not have to try or guess. I know about how assert() works because it is documented in the lua manual (and as it closely mimics the assert() C function, that is easy for me to remember). Best wishes, Taco