
Preciso descrever de maneira geral a sintaxe de sequências alfanuméricas aleatórias, digamos ACW3920
ou 39B0Q8
, e discutir certos casos, por exemplo, os dois primeiros dígitos sendo letras, ou a sequência que termina com BA
, 87
ou similar. Usar X
como caractere de espaço reservado para letras e N
como caractere de espaço reservado para números levaria à confusão porque alguns dos casos discutidos lidam com sequências começando com X
ou N
: NXNNNN
, a categorização das amostras NX9837
, NX9877
, NX123X
(todas começando com NX
), não comunica o sub- sequência que todos eles têm em comum, nem leva em consideração dígitos que podem ser uma letraouum número.
Idealmente, eu usaria símbolos de espaço reservado que identificassem exclusivamente um dígito de letra, um dígito numérico ou um dígito ambivalente. Já existe algum símbolo usado para esse problema (como ¤
para moeda não especificada), que não pareça muito estranho entre as letras normais? Símbolos como \CIRCLE
e seus derivados afetam muito a cor do tipo e ...
não transmitem o número de dígitos.
Responder1
Posso responder do ponto de vista do TeX. Minha idéia é definir as strings em fonte monoespaçada (talvez escolha uma diferente do padrão), mas as “variáveis” são uma caixa D ou uma caixa L para “dígito” e “letra”. Talvez você possa adicionar outro símbolo para um caractere que seja um dígito ou uma letra.
A principal coisa neste código é que ele é muito personalizável: as variáveis são denotadas por ?
e !
(você pode escolher d
e l
se letras minúsculas não forem usadas nas strings), a conversão para caracteres em caixa acontece examinando cada caractere na entrada e verificando se representa uma “variável” (espaço reservado).
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\rstring}{m}
{
\group_begin:
\normalfont\ttfamily
\mulmet_rstring:n { #1 }
\group_end:
}
\cs_new_protected:Nn \mulmet_rstring:n
{
\hspace{0.05em}
\str_map_inline:nn { #1 }
{
\str_case:nnF { ##1 }
{
{?}{\mulmet_rstring_placeholder:n { D }}
{!}{\mulmet_rstring_placeholder:n { L }}
}
{ ##1 }
\hspace{0.05em}
}
}
\cs_new_protected:Nn \mulmet_rstring_placeholder:n
{
\dim_set:Nn \fboxrule { 0.3pt }
\dim_set:Nn \fboxsep { 0pt }
\framebox[0.5em]
{
\hspace{-0.3pt}
\vphantom{A}
\normalfont\tiny\raisebox{0.4\height}{#1}
\hspace{-0.3pt}
}
}
\ExplSyntaxOff
\begin{document}
We have the full string \rstring{ACW3920} but also
an incomplete one \rstring{AC????} and one with
\rstring{!!????} two letters and four digits.
\noindent one with \rstring{ABCDEF}
\end{document}
Na última linha mostro que as strings ocupam o mesmo espaço, estejam elas cheias ou contenham espaços reservados.
Se você adicionar \usepackage[lighttt]{lmodern}
você obtém