C# 在字符串中创建下标
C# Create a subscript in a string
目前我正在尝试修复我的应用程序中的一些格式。我正在尝试下标 string
并将其附加到正常的 string
- 与您在 MS word 中执行此操作的方式相同。我已经试过了(假设 here and here):
string temp = "NormalText";
foreach( char t in "SubscriptedText".ToCharArray())
temp += "\x208" + t;
MessageBox.Show(temp);
输出:
NormalTextȈSȈuȈbȈsȈcȈrȈiȈpȈtȈeȈdȈTȈeȈxȈt
但是,正如我后来指出的那样,必须支持 unicode 定义的是字体。而且网上好像也没有支持所有上标格式字母的字体。
那么,有没有办法格式化我的文本以便为它的后半部分添加下标?也许我缺少一个简单的功能?或者这是不可能的,我必须自己对齐我的下标文本?
编辑
也试过这个:
string temp = "NormalText";
foreach( char t in "SubscriptedText".ToCharArray())
temp += "\x208" + (int)t;
MessageBox.Show(temp);
但是(当然)这根本行不通。我的输出如下所示:
NormalTextȈ84Ȉ105Ȉ101Ȉ102Ȉ101Ȉ114Ȉ84Ȉ101Ȉ120Ȉ11
首先,可用于订阅的符号数量有限。有这些符号:
1 - '\u2081'
2- '\u2082'
3- '\u2083'
...
9 - '\u2089'
+ - '\u208A'
- - '\u208B'
= - '\u208C'
( - '\u208D'
) - '\u208E'
就是这样。所以你不能下标像 "SubscriptedText".
这样的字符串
如果你想转换为订阅一些数字或允许的符号,你可以尝试以下方式:
void ShowSubText()
{
String inputString = "NormalText";
var nonDigitSymbolsTable = new Dictionary<char, char>();
nonDigitSymbolsTable.Add('+', 'A');
nonDigitSymbolsTable.Add('-', 'B');
nonDigitSymbolsTable.Add('=', 'C');
nonDigitSymbolsTable.Add('(', 'D');
nonDigitSymbolsTable.Add(')', 'E');
StringBuilder temp = new StringBuilder();
int checkToDigit = 0;
foreach (char t in "1234567890+-=()".ToCharArray())
{
if (int.TryParse(t.ToString(), out checkToDigit))
temp.Append("\u208" + t);
else
temp.Append("\u208" + nonDigitSymbolsTable[t]);
}
MessageBox.Show(inputString + GetStringFromUnicodeSymbols(temp.ToString()));
}
string GetStringFromUnicodeSymbols(string unicodeString)
{
var stringBuilder = new StringBuilder();
foreach (Match match in Regex.Matches(unicodeString, @"\u(?<Value>[a-zA-Z0-9]{4})"))
{
stringBuilder.AppendFormat(@"{0}",
(Char)int.Parse(match.Groups["Value"].Value,System.Globalization.NumberStyles.HexNumber));
}
return stringBuilder.ToString();
}
目前我正在尝试修复我的应用程序中的一些格式。我正在尝试下标 string
并将其附加到正常的 string
- 与您在 MS word 中执行此操作的方式相同。我已经试过了(假设 here and here):
string temp = "NormalText";
foreach( char t in "SubscriptedText".ToCharArray())
temp += "\x208" + t;
MessageBox.Show(temp);
输出:
NormalTextȈSȈuȈbȈsȈcȈrȈiȈpȈtȈeȈdȈTȈeȈxȈt
但是,正如我后来指出的那样,必须支持 unicode 定义的是字体。而且网上好像也没有支持所有上标格式字母的字体。
那么,有没有办法格式化我的文本以便为它的后半部分添加下标?也许我缺少一个简单的功能?或者这是不可能的,我必须自己对齐我的下标文本?
编辑 也试过这个:
string temp = "NormalText";
foreach( char t in "SubscriptedText".ToCharArray())
temp += "\x208" + (int)t;
MessageBox.Show(temp);
但是(当然)这根本行不通。我的输出如下所示:
NormalTextȈ84Ȉ105Ȉ101Ȉ102Ȉ101Ȉ114Ȉ84Ȉ101Ȉ120Ȉ11
首先,可用于订阅的符号数量有限。有这些符号:
1 - '\u2081'
2- '\u2082'
3- '\u2083'
...
9 - '\u2089'
+ - '\u208A'
- - '\u208B'
= - '\u208C'
( - '\u208D'
) - '\u208E'
就是这样。所以你不能下标像 "SubscriptedText".
这样的字符串如果你想转换为订阅一些数字或允许的符号,你可以尝试以下方式:
void ShowSubText()
{
String inputString = "NormalText";
var nonDigitSymbolsTable = new Dictionary<char, char>();
nonDigitSymbolsTable.Add('+', 'A');
nonDigitSymbolsTable.Add('-', 'B');
nonDigitSymbolsTable.Add('=', 'C');
nonDigitSymbolsTable.Add('(', 'D');
nonDigitSymbolsTable.Add(')', 'E');
StringBuilder temp = new StringBuilder();
int checkToDigit = 0;
foreach (char t in "1234567890+-=()".ToCharArray())
{
if (int.TryParse(t.ToString(), out checkToDigit))
temp.Append("\u208" + t);
else
temp.Append("\u208" + nonDigitSymbolsTable[t]);
}
MessageBox.Show(inputString + GetStringFromUnicodeSymbols(temp.ToString()));
}
string GetStringFromUnicodeSymbols(string unicodeString)
{
var stringBuilder = new StringBuilder();
foreach (Match match in Regex.Matches(unicodeString, @"\u(?<Value>[a-zA-Z0-9]{4})"))
{
stringBuilder.AppendFormat(@"{0}",
(Char)int.Parse(match.Groups["Value"].Value,System.Globalization.NumberStyles.HexNumber));
}
return stringBuilder.ToString();
}