
Quero perguntar se posso gerar informações binárias em \special
? Se for possível, como coloco o binário na fonte TeX? Em C/C++, por exemplo, \0
pode ser usado para obter o byte, 00000000
então qual poderia ser o equivalente para TeX?
Responder1
Se você quer dizer, posso digitar \special
seguido de algo no .tex
arquivo de origem para obter dados binários no arquivo DVI, então a resposta é não (mas veja abaixo). Isso ocorre porque no TeX \special
não é realmente especial: é apenas um comando primitivo (como \def
or \write
), e simplesmente escreve os tokens que são fornecidos dentro de \special{...}
, enquanto os expande e assim por diante (como \edef
or \xdef
). Como é difícil obter dados binários arbitrários em uma lista de tokens TeX, você não pode gravá-los em um arquivo DVI. (No entanto, vejaesta respostaque aponta uma maneira que isso pode ser possível (apenas possível, não é fácil!) usando pdflatex -8bit
.)
As seções relevantes do programa TeX (veja comtexdoc tex
), mostrando que \special
usa show_token_list
etc.:
Mesmo se você pudesse obter dados binários gravados na fonte do TeX, isso funcionaria? O próprio formato DVI suporta dados binários arbitrários dentro de especiais (também conhecidos como comandos xxx1
to xxx4
). Contudo, existe uma convenção de que os dados são texto; na verdade, dvitype
gera um erro ou aviso quando um xxx
comando contém dados não ASCII.
É claro que isso pode ser apenas uma convenção da época em que o DVItype foi escrito (última atualização em 1995), e eu não examinei os especiais DVI produzidos por vários pacotes (ou o que o XeTeX faz em seu .xdv
formato). Portanto, é possível que você tenha dados binários lá e saia impune - pelo menos em alguns drivers DVI, já que a interpretação do especial depende inteiramente do driver DVI. Mas se você estiver escrevendo seu próprio driver DVI (o que é assumido se você estiver colocando especiais incomuns lá), então você pode também escrever os dados binários em base64 ou alguma codificação somente ASCII e, em seguida, fazer com que o driver decodifique-o em dados arbitrários.