请节省您的时间和精力在这个问题上,我还提供了一个潜在的解决方案。
注意:如今象形文字的字体已经好多了,这个问题已经过时了。这确实是考古学家的问题!
以前,我使用的是所见即所得的编辑器。安装并选择字体后,我们输入字母,然后从字体中获取字形,字形可以是任何东西:字母、符号、棋子、字形、汉字或象形文字。
我已经从以下网站下载了几个 TTF 文件http://www.rockwellweb.com/hiero.htm我很惊讶它没有像预期的那样在 TeX 中工作。假设我们尝试从中获取几个象形文字GARDAE__.TTF
。如何获得类似于下面我输入的屏幕截图的输出abcdef
?
xelatex
我还附上了和的 MWE lualatex
。我们在 XeLaTeX 中得到了 12 个矩形,在 LuaLaTeX 中得到了一个空白页。
% run: xelatex or lualatex mal-hiero-mwe.tex
\documentclass[a4paper]{article}
\pagestyle{empty}
\usepackage{fontspec}
\def\changeto{\setmainfont{GARDAE__.TTF}}
\def\hiero#1{{\changeto#1}}
\begin{document}
\hiero{abcdef}\par
\hiero{ABCDEF}
\end{document}
答案1
我很高兴找到了这个老问题的解决方案,于是我做了一两个实验,结果偶然解决了。如果你不介意的话,就是这样。
问题
问题是字形被映射到公共使用区域,从F000
到而不是从到 的F0FF
一系列,所见即所得编辑器可以很好地处理这个问题。我曾使用 OpenOffice Writer 来完成这项任务。0000
00FF
XeLaTeX 中的解决方案
我们可以自己准备映射文件,我已经小规模地做过了,但如果可能的话,我需要一次重新映射所有 256 个字形。我开始尝试UniClass
,这是我在 TeX Live 发行版中的 ITRANS 映射文件中发现的一个选项。让我们将其作为我们的实验映射文件hiero-ae.map
:
; An experiment with UniClass...
LHSName "Keystrokes"
RHSName "GardinerAE"
LHSDescription "The keystrokes from the user"
RHSDescription "Output suitable for Gardiner AE.ttf"
pass(Unicode)
UniClass [keystrokes] = (U+0000 .. U+00FF)
UniClass [hieroglyphs] = (U+F000 .. U+F0FF)
[keystrokes] <> [hieroglyphs]
我们只需要用 来编译它teckit_compile
,例如运行:
teckit_compile hiero-ae.map -o hiero-ae.tec
我们的最后一步是将其加载到 XeLaTeX 中。值得一提的是,据我所知,LuaLaTeX 中尚未准备好映射。我附上了一个示例,并将在本文末尾附上 PDF 文件的预览。
% run: xelatex mal-hieroglyphs.tex
\documentclass[a4paper]{article}
\pagestyle{empty}
\usepackage{fontspec}
\def\hiero#1{{\setmainfont[Mapping=hiero-ae]{GARDAE__.TTF}#1}}
\begin{document}
\hiero{abcdef}\par
\hiero{ABCDEF}
\end{document}
LuaLaTeX 中的解决方案
我也尝试在 LuaLaTeX 中解决此任务。我在 Lua 中使用string.byte
和逐个字符替换字符string.format
。我附上了 TeX 代码和结果预览。
% run: lualatex mal-hiero-luatex.tex
\documentclass[a4paper]{article}
\pagestyle{empty}
\usepackage{fontspec}
\def\changeto{\setmainfont{GARDAE__.TTF}}
\usepackage{luacode}
\begin{luacode*}
function processme(text)
--print(text) -- The processed part...
for char=1,#text do
value="F0"..string.format("%02X",string.byte(text,char))
--print(value) -- The value of a character...
tex.sprint("\\char\""..value)
end -- of for char...
--tex.sprint(text)
end -- of function processme...
\end{luacode*}
\def\hiero#1{{\changeto\directlua{processme("#1")}}}
\begin{document}
\hiero{abcdef}\par
\hiero{ABCDEF}
\end{document}