ANSI 终端分层字符一个在另一个之上
ANSI Terminal layering characters one on top of another
是否可以在 ANSI 终端(或模拟器,它可以是任何类型)的上下文中将两个字符重叠绘制?或者,至少,有没有办法在它上面打印一个字符和一个条(比如下划线,带线)?
无法在终端中逐个绘制字符。这完全违反了终端的基本原则,即每个单元格包含 1 个字符。
如果您的终端支持 unicode,则有特殊的 unicode 字符称为 combining characters,其中之一是上划线。它的代码是U+0305。因此,使用它,您可以在另一个字符上绘制上划线。
这是执行此操作的示例 C 代码
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
setlocale(LC_CTYPE, "");
for (wchar_t ch = 'a'; ch <= 'z'; ++ch) {
wprintf(L"%lc\u0305 ", ch);
}
}
应该会产生类似的东西
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̅
差不多就是你想要的了。
是否可以在 ANSI 终端(或模拟器,它可以是任何类型)的上下文中将两个字符重叠绘制?或者,至少,有没有办法在它上面打印一个字符和一个条(比如下划线,带线)?
无法在终端中逐个绘制字符。这完全违反了终端的基本原则,即每个单元格包含 1 个字符。
如果您的终端支持 unicode,则有特殊的 unicode 字符称为 combining characters,其中之一是上划线。它的代码是U+0305。因此,使用它,您可以在另一个字符上绘制上划线。
这是执行此操作的示例 C 代码
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
setlocale(LC_CTYPE, "");
for (wchar_t ch = 'a'; ch <= 'z'; ++ch) {
wprintf(L"%lc\u0305 ", ch);
}
}
应该会产生类似的东西
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̅
差不多就是你想要的了。