I’ve been working on some functions to support special math alphabets. I would like to share some of my work.
In[]:=
r=Range[26]
Out[]=
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26}
These are the alphabets I created.
In[]:=
lowerCaseScriptAlphabet=FromLetterNumberToScriptLowerCase[r]
Out[]=
{,,,,ℯ,,ℊ,,,,,ℓ,,,ℴ,,,,,,,,,,,}
In[]:=
lowerCaseGothicAlphabet=FromLetterNumberToGothicLowerCase[r]
Out[]=
{,,,,,,,,,,,,,,,,,,,,,,,,,}
In[]:=
lowerCaseDoubleStruckAlphabet=FromLetterNumberToDoubleStruckLowerCase[r]
Out[]=
{,,,,,,,,,,,,,,,,,,,,,,,,,}
In[]:=
lowerCaseFormalAlphabet=FromLetterNumberToFormalLowerCase[r]
Out[]=
a.,b.,c.,d.,e.,f.,g.,h.,i.,j.,k.,l.,m.,n.,o.,p.,q.,r.,s.,t.,u.,v.,w.,x.,y.,z.
Now we can make uppercase alphabets too.
In[]:=
upperCaseScriptAlphabet=ToUpperCase[lowerCaseScriptAlphabet]
Out[]=
{,ℬ,,,ℰ,ℱ,,ℋ,ℐ,,,ℒ,ℳ,,,,,ℛ,,,,,,,,}
In[]:=
upperCaseGothicAlphabet=ToUpperCase[lowerCaseGothicAlphabet]
Out[]=
{,,ℭ,,,,,ℌ,ℑ,,,,,,,,,ℜ,,,,,,,,ℨ}
In[]:=
upperCaseDoubleStruckAlphabet=ToUpperCase[lowerCaseDoubleStruckAlphabet]
Out[]=
{,,,,,,,,,,,,,,,,,,,,,,,,,}
In[]:=
upperCaseFormalAlphabet=ToUpperCase[lowerCaseFormalAlphabet]
Out[]=
A.,B.,C.,D.,E.,F.,G.,H.,I.,J.,K.,L.,M.,N.,O.,P.,Q.,R.,S.,T.,U.,V.,W.,X.,Y.,Z.
Now we combine all the lowercase alphabets into one.
In[]:=
lowerCaseSpecialMathAlphabets=Catenate[{lowerCaseDoubleStruckAlphabet,lowerCaseFormalAlphabet,lowerCaseGothicAlphabet,lowerCaseScriptAlphabet}]
Out[]=
,,,,,,,,,,,,,,,,,,,,,,,,,,a.,b.,c.,d.,e.,f.,g.,h.,i.,j.,k.,l.,m.,n.,o.,p.,q.,r.,s.,t.,u.,v.,w.,x.,y.,z.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ℯ,,ℊ,,,,,ℓ,,,ℴ,,,,,,,,,,,
All uppercase alphabets:
In[]:=
upperCaseSpecialMathAlphabets=ToUpperCase[lowerCaseSpecialMathAlphabets]
Out[]=
,,,,,,,,,,,,,,,,,,,,,,,,,,A.,B.,C.,D.,E.,F.,G.,H.,I.,J.,K.,L.,M.,N.,O.,P.,Q.,R.,S.,T.,U.,V.,W.,X.,Y.,Z.,,,ℭ,,,,,ℌ,ℑ,,,,,,,,,ℜ,,,,,,,,ℨ,,ℬ,,,ℰ,ℱ,,ℋ,ℐ,,,ℒ,ℳ,,,,,ℛ,,,,,,,,
All the special math characters:
In[]:=
specialMathAlphabets=Catenate[{lowerCaseSpecialMathAlphabets,upperCaseSpecialMathAlphabets}]
Out[]=
,,,,,,,,,,,,,,,,,,,,,,,,,,a.,b.,c.,d.,e.,f.,g.,h.,i.,j.,k.,l.,m.,n.,o.,p.,q.,r.,s.,t.,u.,v.,w.,x.,y.,z.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ℯ,,ℊ,,,,,ℓ,,,ℴ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,A.,B.,C.,D.,E.,F.,G.,H.,I.,J.,K.,L.,M.,N.,O.,P.,Q.,R.,S.,T.,U.,V.,W.,X.,Y.,Z.,,,ℭ,,,,,ℌ,ℑ,,,,,,,,,ℜ,,,,,,,,ℨ,,ℬ,,,ℰ,ℱ,,ℋ,ℐ,,,ℒ,ℳ,,,,,ℛ,,,,,,,,
My next goal is to design an enhanced form of FromLetterNumber.
In[]:=
SpecialMathCharacterQ//ClearAllSpecialMathCharacterQ[s_]:=FalseSpecialMathCharacterQ[s_?StringQ/;StringLength[s]===1]:=MemberQ[specialMathAlphabets,s]
In[]:=
AllTrue[SpecialMathCharacterQ][specialMathAlphabets]
Out[]=
True
In[]:=
SpecialMathCharacterQ[""]
Out[]=
True
In[]:=
EnhancedFromLetterNumber//ClearAllSetAttributes[EnhancedFromLetterNumber,{Listable}]EnhancedFromLetterNumber[s_Integer?IntegerQ]:=FromLetterNumber[s]EnhancedFromLetterNumber[s_Integer?IntegerQ,alphabet_/;MatchQ[alphabet,Except[Alternatives@@{"Script","Gothic","Formal","DoubleStruck"},_]]]:=FromLetterNumber[s,alphabet]EnhancedFromLetterNumber[s_Integer?IntegerQ,"Script"]:=FromLetterNumberToScriptLowerCase[s]EnhancedFromLetterNumber[s_Integer?IntegerQ,"Gothic"]:=FromLetterNumberToGothicLowerCase[s]EnhancedFromLetterNumber[s_Integer?IntegerQ,"DoubleStruck"]:=FromLetterNumberToDoubleStruckLowerCase[s]EnhancedFromLetterNumber[s_Integer?IntegerQ,"Formal"]:=FromLetterNumberToFormalLowerCase[s]
In[]:=
LetterNumber["α"]
Out[]=
0
In[]:=
FromLetterNumber["","DoubleStruck"]
Out[]=
Missing[NotAvailable]
In[]:=
EnhancedFromLetterNumber["","DoubleStruck"]
Out[]=
$Failed
In[]:=
FromLetterNumber["A"]
Out[]=
FromLetterNumber[A,English]
In[]:=
FromLetterNumber[1,"Formal"]
Out[]=
Missing[NotAvailable]
Here I demonstrate the function.
In[]:=
EnhancedFromLetterNumber[r,"Script"]
Out[]=
{,,,,ℯ,,ℊ,,,,,ℓ,,,ℴ,,,,,,,,,,,}
In[]:=
EnhancedFromLetterNumber[r,"Gothic"]
Out[]=
{,,,,,,,,,,,,,,,,,,,,,,,,,}
In[]:=
EnhancedFromLetterNumber[r,"DoubleStruck"]
Out[]=
{,,,,,,,,,,,,,,,,,,,,,,,,,}
In[]:=
EnhancedFromLetterNumber[r,"Formal"]
Out[]=
a.,b.,c.,d.,e.,f.,g.,h.,i.,j.,k.,l.,m.,n.,o.,p.,q.,r.,s.,t.,u.,v.,w.,x.,y.,z.
In[]:=
FromLetterNumber[1,"Formal"]
Out[]=
Missing[NotAvailable]
In[]:=
EnhancedFromLetterNumber[1,"Greek"]
Out[]=
α
In[]:=
Transpose[{lowerCaseScriptAlphabet,upperCaseDoubleStruckAlphabet}]
Out[]=
{{,},{,},{,},{,},{ℯ,},{,},{ℊ,},{,},{,},{,},{,},{ℓ,},{,},{,},{ℴ,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,}}
Swap the case for each alphabet.
script:
In[]:=
StringJoin[Transpose[{lowerCaseScriptAlphabet,upperCaseScriptAlphabet}]]
Out[]=
ℬℯℰℱℊℋℐℓℒℳℴℛ
In[]:=
ResourceFunction["SwapCase"][StringJoin[Transpose[{lowerCaseScriptAlphabet,upperCaseScriptAlphabet}]]]
Out[]=
ℬℰℯℱℊℋℐℒℓℳℴℛ
gothic:
In[]:=
StringJoin[Transpose[{lowerCaseGothicAlphabet,upperCaseGothicAlphabet}]]
Out[]=
ℭℌℑℜℨ
In[]:=
ResourceFunction["SwapCase"][StringJoin[Transpose[{lowerCaseGothicAlphabet,upperCaseGothicAlphabet}]]]
double struck
formal: