
Ich möchte fragen, ob ich binäre Informationen ausgeben kann \special
. Wenn das möglich ist, wie füge ich die Binärdatei in die TeX-Quelle ein? In C/C++ \0
kann beispielsweise verwendet werden, um das Byte abzurufen. 00000000
Was könnte also das Äquivalent für TeX sein?
Antwort1
Wenn Sie meinen, ob ich \special
in die Quelldatei etwas gefolgt von etwas eingeben kann, .tex
um Binärdaten in die DVI-Datei zu bekommen, dann ist die Antwort nein (siehe aber unten). Das liegt daran, dass es in TeX \special
nichts wirklich Besonderes ist: Es ist nur ein primitiver Befehl (wie \def
oder \write
), und er schreibt einfach die Token aus, die in angegeben sind \special{...}
, während er sie erweitert und so weiter (wie \edef
oder \xdef
). Da es schwierig ist, beliebige Binärdaten in eine TeX-Tokenliste zu bekommen, können Sie diese nicht in eine DVI-Datei schreiben. (Siehe jedochdiese Antwortwas auf eine Möglichkeit hinweist, wie es mithilfe von möglich sein könnte (nur möglich, nicht einfach!) pdflatex -8bit
.)
Die entsprechenden Abschnitte aus dem TeX-Programm (siehetexdoc tex
), was zeigt, dass \special
Verwendungen show_token_list
usw.:
Selbst wenn Sie binäre Daten aus der TeX-Quelle ausschreiben könnten, würde das funktionieren? Das DVI-Format selbst unterstützt beliebige binäre Daten innerhalb von Sonderzeichen (auch bekannt als xxx1
to- xxx4
Befehle). Es besteht jedoch die Konvention, dass die Daten Text sind; tatsächlich dvitype
wird ein Fehler oder eine Warnung ausgegeben, wenn ein xxx
Befehl Nicht-ASCII-Daten enthält.
Natürlich kann dies nur eine Konvention aus der Zeit sein, als DVItype geschrieben wurde (letzte Aktualisierung 1995), und ich habe die von verschiedenen Paketen erzeugten DVI-Sonderzeichen (oder was XeTeX in seinem .xdv
Format macht) nicht untersucht. Es ist also möglich, dass Sie dort Binärdaten haben und damit durchkommen – zumindest in einigen DVI-Treibern, da die Interpretation des Sonderzeichens vollständig dem DVI-Treiber überlassen ist. Aber wenn Sie Ihren eigenen DVI-Treiber schreiben (was vorausgesetzt wird, wenn Sie dort ungewöhnliche Sonderzeichen einfügen), können Sie die Binärdaten genauso gut in Base64 oder einer ähnlichen Nur-ASCII-Kodierung schreiben und sie dann vom Treiber in beliebige Daten dekodieren lassen.