![luacode を Lua ファイルに移動し、名前でグリフにアクセスする](https://rvso.com/image/399816/luacode%20%E3%82%92%20Lua%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%97%E3%80%81%E5%90%8D%E5%89%8D%E3%81%A7%E3%82%B0%E3%83%AA%E3%83%95%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B.png)
私は(基本的に)次のコード(貢献者が尋ねた後に提供したもの)を含むパッケージを持っていますこの質問tex.stackoverflow で参照してください。
\begin{luacode}
documentdata = documentdata or { }
documentdata.fontchar = function (chr)
local chr = luaotfload.aux.slot_of_name(font.current(), chr, false)
print(chr)
if chr and type(chr) == "number" then
tex.sprint(string.format([[\char"%X]], chr))
end
end
\end{luacode}
\def\fontchar#1{\directlua{documentdata.fontchar "#1"}}
この関数は、フォントからグリフを名前で検索し、それを TeX ドキュメントに出力します。
私はパッケージをLuaのみのパッケージに変換し始めており、そのコードを別のLuaファイルに移動したいと考えています。(最終的には関数はない使用しtex.sprint
て文字列を返すので、そのようなグリフを Lua 経由で渡すことが可能かどうかを知りたいのですが、それは後続の問題です。
しかし、正しい翻訳だと思っていたのに、エラーが発生します。
local character = {}
function character.char_by_name(name)
local chr = luaotfload.aux.slot_of_name(font.current(), name, false)
if chr and type(chr) == "number" then
tex.sprint(string.format([[\char"%X]], chr))
else
tex.sprint('f') -- 'forte' character to show "not found"
end
end
return character
と書かれています。実際、マニュアルの のドキュメントでは関数のシグネチャとして と記載されているluaotfload | aux : invalid parameters to slot_of_name (16, nil)false
ため、これは妥当なようです。そのドキュメントを見ると、そもそも 環境でこれがなぜ機能したのか疑問に思います。aux.slot_of_name
luaotfload
aux.slot_of_name(name : string)
luacode
完全な MWE は次のとおりです。TeX Live に (または音楽コレクション) がインストールされている場合は、使用されている特別なフォントも一緒にインストールされるため、コンパイルできると思います。これは、上記の Lua の例が保存されているファイルlilyglyphs
です。.tex
character.lua
\documentclass{scrartcl}
\usepackage{luaotfload,luacode}
\begin{luacode}
documentdata = documentdata or { }
documentdata.fontchar = function (chr)
local chr = luaotfload.aux.slot_of_name(font.current(), chr, false)
if chr and type(chr) == "number" then
tex.sprint(string.format([[\char"%X]], chr))
end
end
\end{luacode}
\def\fontchar#1{\directlua{documentdata.fontchar "#1"}}
% Alternative implementation in Lua file
\directlua{lua_char = require('character.lua')}
\newcommand{\luafontchar}[1]{\directlua{lua_char.char_by_name(#1)}}
\font\mainfont="emmentaler-11" at 20pt
\begin{document}
\mainfont
\noindent
\fontchar{clefs.C}\\
\fontchar{clefs.G}\\
\fontchar{flags.u7}
\bigskip
\luafontchar{Something}
\end{document}
\fontchar
Emmentaler フォントから期待されるグリフを生成するための呼び出しにより、\luafontchar
前述のエラーが発生し、フォールバック グリフが印刷されます。