我需要概括描述随机字母数字序列的语法,比如ACW3920
或39B0Q8
,并讨论某些情况,例如前两位数字是字母,或以 结尾的序列BA
,87
或类似情况。用作X
字母的占位符和N
用作数字的占位符会导致混淆,因为讨论的一些情况处理以X
或开头的序列N
:NXNNNN
,样本NX9837
、NX9877
、NX123X
(均以 开头NX
)的分类既没有传达它们共同具有的子序列,也没有考虑可以是字母的数字或者一个号码。
理想情况下,我会使用占位符来唯一地标识字母数字、数字或模棱两可的数字。是否有任何已使用的符号可用于解决此类问题(例如¤
未指定的货币),并且不会在正常字母之间显得太过偏离?像\CIRCLE
及其派生词这样的符号会对字体颜色产生太大影响,并且...
不会传达数字的数量。
答案1
我可以从 TeX 的角度回答。我的想法是将字符串设置为等宽字体(可能选择与默认字体不同的字体),但“可变”的字符串是带框的 D 或带框的 L,分别表示“数字”和“字母”。也许您可以为数字或字母字符添加另一个符号。
此代码的主要特点是它非常可定制:变量用?
和表示!
(如果字符串中未使用小写字母,则您可以选择d
和l
),通过检查输入中的每个字符并检查它是否代表“变量”(占位符)来转换为带框的字符。
\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}
在最后一行,我表明字符串无论已满还是包含占位符都占据相同的空间。
如果你添加\usepackage[lighttt]{lmodern}
你得到