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_args
nele.
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:nnn
todos 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\xdef
nada 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 TU
se 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_args
erro é 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:nnn
funçã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 xparse
pacote fornecer uma maneira consistente de lidar com argumentos de comando.
Então demorei um pouco para abandoná-lo, talvez infelizmente, e agora fontspec
també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 fontspec
fornece 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.