오늘의 글꼴 사양 업데이트로 인해 Fontspec_pass_args가 깨졌나요?

오늘의 글꼴 사양 업데이트로 인해 Fontspec_pass_args가 깨졌나요?

몇 시간 전에 다음 코드가 완벽하게 작동했습니다(Ubuntu의 LuaLatex, TeXlive 2016).

\DeclareDocumentCommand \SetBaseFont { o m }
 { \__fontspec_pass_args:nnn \__fontspec_SetBaseFont:nn {#1} {#2} }
\cs_new:Nn \__fontspec_SetBaseFont:nn
 {
  \long\xdef\@basefontfeatures{#1}
  \long\xdef\@basefontname{#2}
  \global\@basefontsettrue
  \ignorespaces
 }

이제 실패합니다. 그 사이에 내가 한 일은 tlmgr을 통해 texlive를 업데이트하는 것뿐이었습니다. 내 코드는 변경되지 않습니다. 나는 업데이트된 패키지 중 Fontspec이 있다는 것을 알았습니다.

그 안에 있는 선으로 좁혀봤습니다 fontspec_pass_args.

비슷한 문제가 있는 다른 사람이 있나요?

편집: 확실히 글꼴 사양 코드가 변경되었습니다(이 겸손한 사용자는 말합니다). \__fontspec_pass_args:nnn내 코드에 나타나는 모든 부분을 편집했습니다 . 그런 다음 글꼴 정의를 위해 이전과 달리 옵션 대괄호를 사용해야 했습니다(기능이 필요하지 않은 경우에도). \SetBaseFont[]{Some Font}이제 코드가 컴파일됩니다. 다행스럽게도 문제 코드가 무엇이든 나에게는 필요한 것이 아니었습니다. 훨씬 간단한 정의를 가진 글꼴에 대해 유사한 코드를 사용했기 때문에 \long\xdef그런 문제는 아닙니다 .

추가 편집:

로그 파일에서(위에서 설명한 대로 편집하여 컴파일할 코드를 얻은 후) 다음과 같은 수많은 메시지를 볼 수 있습니다. 나는 그들을 전에 본 기억이 없지만 어쩌면 눈치 채지 못했을 수도 있습니다. 글꼴 사양과 관련이 있으므로 TU여기에 예가 있습니다. 문제는 실제로 마이크로타입에 의해 감지되었습니다. 내가 사용하는 글꼴은 모두 Open Type입니다.

Package microtype Warning: Unknown slot number of character
(microtype)                `\textgreater '
(microtype)                in font encoding `TU' in protrusion list
(microtype)                `T1-default'.

아마도 그것은 관련이 있을 수도 있고 아닐 수도 있습니다.

또 다른 내용:

내 질문은 실제로 저절로 대답됩니다! 오류가 발생하는 이유는 fontspec_pass_args단순히 최신 버전의 글꼴 사양(2.5c, 3주 전)에 더 이상 해당 명령이 없기 때문입니다. 따라서 다른 사람들이 내 문제를 경험하지 않는다면 이는 자신의 코드에서 이전 글꼴 사양 코드를 모방하지 않았기 때문입니다. 하지만 TU에 대한 이상한 메시지는 여전히 존재하며 신비스럽습니다.

답변1

귀하의 질문에는 두 가지 측면이 있습니다.

  • 마이크로타입/TU 관련 내용은 조만간 예정된 LaTeX2e 업데이트에서 수정될 예정입니다.

  • 코드 분리와 관련하여 expl3 프로그래밍 스타일 가이드(l3styleguide.pdf)를 참조하겠습니다.

비공개 함수( 로 시작하는 함수 \__)는 모듈 간에 사용하면 안 됩니다.

하지만 그건 아마도 지나치게 간략한 설명일 것이다.:)

\__fontspec_pass_args:nnn함수는 선택적 인수를 조작하여 다음을 작성할 수 있도록 설계되었습니다.

\fontspec[<options>]{fontname}

또는

\fontspec{fontname}[<options>]

하지만

\fontspec[<options>]{fontname}[<options>]

이것을 본즉 어떻게 말해야 하리요오히려 불리하게tex.sx 채팅방의 LaTeX3 illuminati 사이에서는 xparse명령 인수를 처리하는 일관된 방법을 제공하려는 패키지의 일반적인 철학에 어긋나기 때문입니다.

그래서 불행하게도 그것을 삭제하는 데 시간이 좀 걸렸고 이제 fontspec"이중 선택 사항" 형식도 허용됩니다.

\fontspec[<options>]{fontname}[<options>]

이것은 다음과 같은 내용을 사용합니다.

\DeclareDocumentCommand \fontspec { O{} m O{} }

타사 코드에서는 누구도 \__fontspec_pass_args:nnn.

실제로 API는 fontspec내부 명령을 사용하지 않고 글꼴을 로드하는 표준 방법을 제공합니다 \__. 그래도 필요한 것이 제공되지 않으면 Github 저장소에 기능 요청을 제출해 주시기 바랍니다.

관련 정보