Какие символы следует использовать в качестве заполнителей для букв и цифр?

Какие символы следует использовать в качестве заполнителей для букв и цифр?

Мне нужно в общем описать синтаксис случайных буквенно-цифровых последовательностей, скажем, 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}вы получите

введите описание изображения здесь

решение2

Можете попробовать \textvisiblespace, если я не ошибаюсь в ваших намерениях.

\documentclass{article}

\begin{document}

ACW3920\qquad A\textvisiblespace W39\textvisiblespace 0

NX9837\qquad \textvisiblespace X9\textvisiblespace 3\textvisiblespace

\end{document}

введите описание изображения здесь

Связанный контент