특정 hlist 생성 시 LuaTeX hpack_filter 콜백이 실행되지 않습니다.

특정 hlist 생성 시 LuaTeX hpack_filter 콜백이 실행되지 않습니다.

편집: hpack_filter가 트리거되고 내 질문은 무의미합니다. 콜백 호출을 놓친 이유에 대한 답변을 참조하세요.

문서에서 수학 표현식의 생성 과정을 분석하기 위해 LuaTeX를 사용하고 있습니다. 이를 위해 콜백을 사용하여 노드 목록에 노드를 mlist_to_hlist삽입합니다 . whatsit다양한 노드 목록을 수평 및 수직 목록으로 묶어 수학 표현식을 최종 형태로 조합할 때 hpack_filtervpack_filter콜백을 사용하여 이 프로세스에 연결합니다. 이를 통해 원시 수학 표현식부터 최종 페이지까지 생성 경로를 따라갈 수 있습니다.

이 프로세스의 특정 부분에 문제가 발생했습니다. align-math-environment의 행은 특정 하위 유형을 가진 수평 목록으로 기본 수직 목록에 추가되는 것 같습니다 . 이러한 hlist노드에는 LuaTeX 문서에서 '정렬 열 또는 행'으로 설명되는 하위 유형 4가 있습니다.

이제 내 문제는 정확히 이러한 의 생성이 콜백 hlist으로 필터링되지 않는다는 것입니다 hpack_filter. 다른 모든 hlist유형의 경우 예상되는 호출을 얻지 hpack_filter만 이에 대해서는 호출하지 않습니다. 내 목적으로는 이미 특정 노드의 발생에 대한 이 프로세스의 입력 인수를 확인한 whatsit다음 패킹을 완전히 취소하는 것으로 충분합니다. 목표는 이 콘텐츠를 기본 수직 목록으로 전송하지 않는 것입니다.

이것은 나의질문:

  • hpack_filter하위 유형 4를 사용 하여 생성이 호출되지 않는 이유는 무엇입니까 hlist?
  • 그러한 동작을 활성화하거나 다른 방법으로 동등한 콜백 메커니즘을 얻는 것이 가능합니까?

답변1

콜백 에 대한 인수로 제공된 노드 목록을 검사하는 동안 hpack_filter입력 인수에 노드가 포함되어 있다는 것을 알지 못했습니다 unset. TeX 명령으로 생성된 정렬이 \halignLuaTeX에서 처리되는 방식에 대한 내 의견은 다음과 같습니다.

  1. hpack인수를 사용한 일련의 호출을 통해 groupcode == align_set입력 노드 목록이 노드 head필드 에 압축됩니다 unset.
  2. 그런 다음 이러한 unset노드( glue노드 및 기타 항목 포함)는 하위 유형 4의 노드로 압축됩니다 . 노드 필드 hlist에 있는 노드 목록은 여전히 ​​존재하지만 이제 하위 유형 5의 노드 필드 에 있습니다 . 이 압축은 호출 에서 발생합니다. 인수로 .headunsetheadhlisthpackgroupcode == fin_row제가 놓치고 싶었던 부분이 바로 이 부분이었습니다.

이는 중간 노드 목록을 보고 알아낸 내용이며 제 생각입니다. 이 정보는 현재까지 LuaTeX 매뉴얼(버전 0.76)에서는 찾을 수 없으며 unset노드에 대한 언급도 거의 없습니다. headLuaTeX 소스 코드를 보고 추론 한 필드가 있다는 것입니다 .

관련 정보