
Intentaré adaptarme pax.sty
a XeLaTeX y descubrí que la URL de .pax
los archivos está codificada como una línea hexadecimal:
\[{annot}{1}{Link}{56.693 693.9 156.107 707.7}{URI}{
URI={\<6D61696C746F3A68656C6C6F406578616D706C652E636F6D\>},
Border={[0 0 0]},
}\\
El URI decodificado es (puede ser visto por )mailto:[email protected]
xxd -r -p
¿Cómo puedo decodificar una línea hexadecimal en XeLaTeX (de hexadecimal a ascii)?
MWE:
\documentclass{article}
\newcommand{\hextotext}[1]{#1} % ???
\begin{document}
\hextotext{6D61696C746F3A68656C6C6F406578616D706C652E636F6D}
\end{document}
Respuesta1
Puede utilizar \str_set_convert:Nnnn
para convertir de (suponiendo) utf8/hex
a utf8
:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\str_new:N \l__ivanov_tmpa_str
\NewDocumentCommand \hextotext { o m }
{
\str_set_convert:Nxnn \l__ivanov_tmpa_str {#2}
{ utf8/hex } { utf8 }
\IfValueTF{#1}
{ \str_set_eq:NN #1 \l__ivanov_tmpa_str }
{ \str_use:N \l__ivanov_tmpa_str }
}
\cs_generate_variant:Nn \str_set_convert:Nnnn { Nx }
\ExplSyntaxOff
\begin{document}
\hextotext{6D61696C746F3A68656C6C6F406578616D706C652E636F6D}
\hextotext[\tmp]{6D61696C746F3A68656C6C6F406578616D706C652E636F6D}
\texttt{\meaning\tmp}
\end{document}
Esto imprime:
Respuesta2
En el caso especial "hex aascii" (como se indica en su pregunta) puede, por ejemplo, poner en minúscula toda la secuencia, insertar siempre ^^
antes de dos caracteres sucesivos de esta secuencia, y tendrá algo que se interpreta, por ejemplo, como \scantokens
la secuencia de caracteres correspondiente en ^^
notación -.
\documentclass{article}
\begingroup
\makeatletter
\catcode`\^^A=14\relax
\catcode`\%=12\relax
\@firstofone{^^A
\endgroup
\newcommand\hextotext[2]{^^A
\@ifdefinable#1{^^A
\lowercase{^^A
\scantokens\expandafter{^^A
\expandafter\newcommand\expandafter#1\expandafter{^^A
\romannumeral\expandafter\hextotextloop\expandafter{\expandafter}\detokenize{#2}\relax\relax
}%^^A
}^^A
}^^A
}^^A
}^^A
}%
\begingroup
\makeatletter
\catcode`\^=12\relax
\@firstofone{%
\endgroup
\newcommand*\hextotextloop[3]{%
\ifx\relax#2\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
{\z@#1}{\hextotextloop{#1^^#2#3}}%
}%
}%
\begin{document}
% 6D61696C746F3A68656C6C6F406578616D706C652E636F6D
^^6d^^61^^69^^6c^^74^^6f^^3a^^68^^65^^6c^^6c^^6f^^40^^65^^78^^61^^6d^^70^^6c^^65^^2e^^63^^6f^^6d
\hextotext{\MyCommand}{6D61696C746F3A68656C6C6F406578616D706C652E636F6D}
\begingroup
\ttfamily
\string\MyCommand: \meaning\MyCommand
\endgroup
\MyCommand
\end{document}
Pero esto es sólo para jugar.
En escenarios de la vida real usaríalo que se proporciona en la respuesta de Phelype Oleinik.Eso cubre la conversión de utf8/hex a utf8, mientras que ASCII (lo que se cubre en mi respuesta) es solo un subconjunto de utf8.