luacode를 Lua 파일로 이동하고 이름으로 글리프에 액세스

luacode를 Lua 파일로 이동하고 이름으로 글리프에 액세스

(기본적으로) 다음 코드를 포함하는 패키지가 있습니다(기여자가 요청한 후 제공).이 질문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입니다. lilyglyphsTeX Live에 (또는 음악 컬렉션)을 설치할 때 사용되는 특수 글꼴을 함께 설치하기 때문에 컴파일할 수 있다고 가정합니다 . .tex위의 Lua 예제가 다음 위치에 저장된 파일 입니다 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}

\fontcharEmmentaler 글꼴에서 예상되는 문자 모양을 생성 하는 호출은 \luafontchar언급된 오류를 발생시키고 대체 문자 모양을 인쇄합니다.

결과

관련 정보