Dados binários em TeX \special

Dados binários em TeX \special

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, \0pode ser usado para obter o byte, 00000000então qual poderia ser o equivalente para TeX?

Responder1

Se você quer dizer, posso digitar \specialseguido de algo no .texarquivo de origem para obter dados binários no arquivo DVI, então a resposta é não (mas veja abaixo). Isso ocorre porque no TeX \specialnão é realmente especial: é apenas um comando primitivo (como \defor \write), e simplesmente escreve os tokens que são fornecidos dentro de \special{...}, enquanto os expande e assim por diante (como \edefor \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 \specialusa show_token_listetc.:

<código>\especial</código> <código>\especial</código>

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 xxx1to xxx4). Contudo, existe uma convenção de que os dados são texto; na verdade, dvitypegera um erro ou aviso quando um xxxcomando contém dados não ASCII.

<code>dvitype</code>

É 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 .xdvformato). 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.

informação relacionada