A atualização do fontspec de hoje quebrando fontspec_pass_args?

A atualização do fontspec de hoje quebrando fontspec_pass_args?

Algumas horas atrás, o seguinte código funcionou perfeitamente (LuaLatex, TeXlive 2016 no Ubuntu):

\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
 }

Agora, ele falha. Nesse meio tempo, tudo que fiz foi atualizar o texlive via tlmgr. Nenhuma alteração no meu próprio código. Notei que fontspec estava entre os pacotes atualizados.

Eu reduzi até a linha que está fontspec_pass_argsnele.

Alguém mais está tendo um problema semelhante?

EDIT: Definitivamente uma mudança no código fontspec (diz este humilde usuário). Editei \__fontspec_pass_args:nnntodos os lugares onde apareceu em meu próprio código. Então, para minhas definições de fonte, ao contrário de antes, precisei usar colchetes de opção (mesmo quando nenhum recurso era necessário): \SetBaseFont[]{Some Font}e agora meu código é compilado. Felizmente, seja lá o que o código do problema faça, não era algo que eu precisava. Observe que usei código semelhante para fontes com definições muito mais simples, então não é uma questão de \long\xdefnada parecido.

MAIS EDIÇÃO:

No arquivo de log (depois que meu código foi compilado, editando conforme descrito acima), vejo inúmeras mensagens semelhantes às seguintes. Não me lembro de tê-los visto antes, mas talvez simplesmente não tenha percebido. Como TUse trata de fontspec, aqui está um exemplo. O problema foi realmente detectado por microtipo. Todas as fontes que uso são Open Type:

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

Talvez isso esteja relacionado, talvez não.

AINDA MAIS:

Minha pergunta realmente se responde sozinha! O motivo do fontspec_pass_argserro é simplesmente que a versão mais recente do fontspec (2.5c, de três semanas atrás) não possui mais esse comando. Então, se outras pessoas não estão enfrentando o meu problema, é porque não estão imitando o código fontspec antigo, em seu próprio código. Mas as mensagens estranhas sobre TU ainda estão lá e são misteriosas.

Responder1

Existem dois aspectos em sua pergunta:

  • O material do microtipo / TU será corrigido em uma atualização do LaTeX2e planejada para algum momento, muito em breve

  • Com relação à quebra de código, encaminharei você para o guia de estilo de programação expl3 (l3styleguide.pdf):

Funções privadas (aquelas iniciadas por \__) não devem ser usadas entre módulos.

Mas essa é provavelmente uma explicação muito breve:)

A \__fontspec_pass_args:nnnfunção foi projetada para manipular argumentos opcionais para que você pudesse escrever

\fontspec[<options>]{fontname}

OU

\fontspec{fontname}[<options>]

MAS NÃO

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

Isso foi visto, como devo dizer,bastante desfavorávelentre os illuminati LaTeX3 na sala de bate-papo tex.sx, porque vai contra a filosofia geral do xparsepacote fornecer uma maneira consistente de lidar com argumentos de comando.

Então demorei um pouco para abandoná-lo, talvez infelizmente, e agora fontspectambém permite o formulário "duplo opcional":

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

Isso usa algo na linha de

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

No código de terceiros, ninguém deveria precisar replicar o comportamento antigo fornecido pelo \__fontspec_pass_args:nnn.

Na verdade, a API fontspecfornece uma maneira padrão de carregar fontes sem usar \__comandos internos. Se isso não fornecer o que é necessário, sinta-se à vontade para registrar uma solicitação de recurso no repositório do Github.

informação relacionada