重新映射埃及象形文字

重新映射埃及象形文字

请节省您的时间和精力在这个问题上,我还提供了一个潜在的解决方案。

注意:如今象形文字的字体已经好多了,这个问题已经过时了。这确实是考古学家的问题!

以前,我使用的是所见即所得的编辑器。安装并选择字体后,我们输入字母,然后从字体中获取字形,字形可以是任何东西:字母、符号、棋子、字形、汉字或象形文字。

我已经从以下网站下载了几个 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 来完成这项任务。000000FF

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}

我们的努力预览

相关内容