变音符号是如何用字体表示并在Java应用程序中键入的?

变音符号是如何用字体表示并在Java应用程序中键入的?,java,fonts,diacritics,Java,Fonts,Diacritics,我正在模拟一台旧的电脑控制台打字机,它有一个不寻常的功能:“标记的数字”。标记的数字是一个上面有一个水平条的数字,你通过按FLG键来键入它,该键键入了水平条,但没有推进回车,然后按了一个数字键 当输出带标记的数字时,打字机使用相同的二冲程过程 由于“flag”类似于一个变音符号(例如,在ñ中的波浪符号),我想我可以这样对待它,将它绑定到它自己的唯一键,而不是option-n(就像在Mac上那样) 我希望能够通过扫描旧的打印输出(带状交叉阴影和所有!)来构建字体。但我不知道定义变音符号涉及到什么,

我正在模拟一台旧的电脑控制台打字机,它有一个不寻常的功能:“标记的数字”。标记的数字是一个上面有一个水平条的数字,你通过按FLG键来键入它,该键键入了水平条,但没有推进回车,然后按了一个数字键

当输出带标记的数字时,打字机使用相同的二冲程过程

由于“flag”类似于一个变音符号(例如,在ñ中的波浪符号),我想我可以这样对待它,将它绑定到它自己的唯一键,而不是option-n(就像在Mac上那样)

我希望能够通过扫描旧的打印输出(带状交叉阴影和所有!)来构建字体。但我不知道定义变音符号涉及到什么,也不知道是否有可能输出文本字符而无需“推进回车”


Fontography(如果这是一个词的话)非常复杂,所以我希望精通这门学科的人能给我指出相关的主题。

Java使用Unicode。一些带变音符号的字符具有。但也有一个选择,它实际上具有零宽度。 示例和示例

要在输出中表示这些内容,需要使用正确的字体

至于在源代码中表示它们,虽然Java原则上可以在源代码中包含任何Unicode字符,但在通常的实践中,这是没有做到的。相反,使用Unicode转义码(例如
\ucc81
),或者从外部源读取非ASCII字符


如果您想做的是创建一种字体,那与Java无关。您需要合适的工具,如FontCreator或FontLab。这些字体必须安装在Java将引用它们的操作系统中。尽管也可以用Java加载它们。

在要呈现的文本中的数字后添加unicode 0305:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

public class MacronTest {

  public static void main(String[] args) {
    JFrame jframe = new JFrame();
    JLabel label = new JLabel();
    jframe.add(label);
    jframe.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    label.setText("1\u0305");
    jframe.setVisible(true);
  }

}

我没有什么贡献,但“排版”可能是你要找的词。@Sam:可能吧,但我指的是电脑字体的构造。“排版”似乎更注重外观。(我认为有一个名为Fontographer的应用程序让我很困惑。)+1非常有用,尽管在理想情况下,对于模拟来说,我希望能够在数字之前“键入”overstrike,并在此时将其呈现在文本区域中。但是,如果创建我自己的字体被证明是不可行的,这可能是我至少输出带标记数字的方式。捕获你想要的上划线字符的任何键码,并附加\u00AF,然后在下一个字符上用后跟组合\u0305的字符替换它。