
Quiero preguntar si puedo generar información binaria en \special
. Si es posible, ¿cómo pongo el binario en la fuente TeX? En C/C++, por ejemplo, \0
se puede usar para obtener el byte 00000000
, entonces, ¿cuál podría ser el equivalente para TeX?
Respuesta1
Si quiere decir, ¿puedo escribir \special
seguido de algo en el .tex
archivo fuente para obtener datos binarios en el archivo DVI? Entonces la respuesta es no (pero consulte a continuación). Esto se debe a que en TeX \special
no es realmente especial: es solo un comando primitivo (como \def
o \write
), y simplemente escribe los tokens que se dan dentro \special{...}
, mientras los expande y así sucesivamente (como \edef
o \xdef
). Como es difícil incluir datos binarios arbitrarios en una lista de tokens TeX, no es posible escribirlos en un archivo DVI. (Sin embargo, veresta respuestalo que señala una forma en que puede ser posible (¡simplemente posible, no fácil!) usar pdflatex -8bit
.)
Las secciones relevantes del programa TeX (verlo contexdoc tex
), mostrando que \special
utiliza show_token_list
, etc.:
Incluso si pudiera obtener datos binarios escritos desde la fuente TeX, ¿funcionaría? El formato DVI en sí admite datos binarios arbitrarios dentro de especiales (también conocidos como comandos xxx1
to xxx4
). Sin embargo, existe una convención de que los datos son texto; de hecho, dvitype
da un error o advertencia cuando un xxx
comando contiene datos que no son ASCII.
Por supuesto, esto puede ser simplemente una convención de la época en que se escribió DVItype (última actualización en 1995), y no he examinado los especiales de DVI producidos por varios paquetes (o lo que hace XeTeX en su .xdv
formato). Por lo tanto, es posible que pueda tener datos binarios allí y salirse con la suya, al menos en algunos controladores DVI, ya que la interpretación del especial depende completamente del controlador DVI. Pero si está escribiendo su propio controlador DVI (lo cual se supone si está colocando especiales inusuales allí), entonces también podría escribir los datos binarios en base64 o alguna codificación solo ASCII y luego hacer que el controlador los decodifique. en datos arbitrarios.