Tabelle.png)
\starttext
\bTABLE
\bTR \bTD%
\startbuffer[mytest]
\input knuth
\stopbuffer[mytest]
\eTD \eTR%
\eTABLE%
\stoptext
tex error > tex error on line 10 in file ...tex: ! Undefined control sequence
Warum passiert das und wie kann ich das Problem lösen?
Antwort1
Kurz zusammengefasstDas geht nicht. Platzieren Sie den Puffer außerhalb der Tabelle.
Der Grund ist, dass \bTD...\eTD
der Inhalt dazwischen als Argument gelesen wird. Sie können den gleichen Fehler problemlos hiermit reproduzieren:
\starttext
\def\test#1\endtest{#1}
\test
\startbuffer[mytest]
\input knuth
\stopbuffer[mytest]
\endtest
\stoptext
Das eigentliche Problem ist, dass durch das Lesen des Inhalts als Argument die Catcodes korrigiert werden, insbesondere werden Zeilenenden in Leerzeichen umgewandelt, was zu
\test \startbuffer[mytest] \input knuth \stopbuffer[mytest] \endtest
Aber sowohl als auch \startbuffer
müssen \stopbuffer
in einer eigenen Zeile stehen.
Weiter unten \start...\stopbuffer
wird der process_input_buffer
Callback verwendet, um den Puffer zu scannen, aber wenn Sie den Callback in der Zeile registrieren, in der \startbuffer
erscheint, wird er nur aktiviertin der nächsten Zeile, also alles andere in derselben Zeile, das \startbuffer
noch immer normal von TeX verarbeitet und erweitert wird. Der \stopbuffer
Befehl ist eigentlich nicht definiert, da er nur als Markierung für den Rückruf verwendet wird, um zu wissen, wann das Scannen beendet werden soll, und dann verworfen wird, aber da er hier als reguläre TeX-Eingabe erscheint und nicht definiert ist, erhalten Sie den angezeigten Fehler „undefinierte Steuersequenz“.
Da Sie immer wieder behaupten, dass Sie aus irgendeinem unbekannten, lächerlichen GrundhabenUm dies zu tun, ist hier ein schlechter Workaround, der in anderen Fällen garantiert fehlschlägt. Ich bin fest davon überzeugt, dass Puffer der falsche Weg sind, um das zu tun, was Sie tun möchten, aber da Sie immer wiederXY-Probleme(was Sie wiederholt gebeten wurden, nicht zu tun) kann ich wirklich nichts weiter tun.
Die wirkliche Lösung besteht darin,keine Puffer in Makros verwenden. Weder als Argument, noch im Ersetzungstext.
\starttext
\def\test#1\endtest{#1}
\test
\ctxlua{buffers.assign(
"mytest",
"\luaescapestring{\normalunexpanded{\input knuth }}")}%
\endtest
\getbuffer[mytest]
\stoptext