
Ich muss die Syntax zufälliger alphanumerischer Sequenzen, beispielsweise ACW3920
oder 39B0Q8
, allgemein beschreiben und bestimmte Fälle diskutieren, z. B. wenn die ersten beiden Ziffern Buchstaben sind oder die Sequenz mit endet BA
oder 87
Ähnliches. Die Verwendung X
als Platzhalterzeichen für Buchstaben und N
als Platzhalterzeichen für Zahlen würde zu Verwirrung führen, da einige der diskutierten Fälle Sequenzen behandeln, die mit X
oder beginnen N
: NXNNNN
, die Kategorisierung der Beispiele NX9837
, NX9877
, NX123X
(alle beginnen mit NX
), kommuniziert weder die Teilsequenz, die sie alle gemeinsam haben, noch berücksichtigt sie Ziffern, die ein Buchstabe sein könnenodereine Zahl.
Idealerweise würde ich Platzhaltersymbole verwenden, die eindeutig eine Buchstabenziffer, eine numerische Ziffer oder eine ambivalente Ziffer identifizieren. Gibt es bereits verwendete Symbole für ein solches Problem (z. B. ¤
für eine nicht angegebene Währung), die zwischen normalen Buchstaben nicht zu sehr abweichen? Symbole wie \CIRCLE
und seine Ableitungen beeinflussen die Schriftfarbe zu stark und ...
vermitteln nicht die Anzahl der Ziffern.
Antwort1
Ich kann aus TeX-Sicht antworten. Meine Idee ist, die Zeichenfolgen in einer monospaced Schriftart zu setzen (vielleicht eine andere als die Standardschriftart wählen), aber die „variablen“ sind ein eingerahmtes D oder ein eingerahmtes L für „Ziffer“ und „Buchstabe“. Vielleicht können Sie ein weiteres Symbol für ein Zeichen hinzufügen, das entweder eine Ziffer oder ein Buchstabe ist.
Das Wichtigste an diesem Code ist, dass er sehr anpassbar ist: Variablen werden durch ?
und gekennzeichnet !
(Sie können d
und wählen l
, wenn in den Zeichenfolgen keine Kleinbuchstaben verwendet werden), die Konvertierung in die eingerahmten Zeichen erfolgt, indem jedes Zeichen in der Eingabe untersucht wird und überprüft wird, ob es eine „Variable“ (Platzhalter) darstellt.
\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}
In der letzten Zeile zeige ich, dass Zeichenfolgen denselben Platz einnehmen, unabhängig davon, ob sie voll sind oder Platzhalter enthalten.
Wenn Sie hinzufügen, \usepackage[lighttt]{lmodern}
erhalten Sie