Hace unas horas, el siguiente código funcionó perfectamente (LuaLatex, TeXlive 2016 en 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
}
Ahora falla. Mientras tanto, todo lo que hice fue actualizar texlive a través de tlmgr. No hay cambios en mi propio código. Noté que fontspec estaba entre los paquetes actualizados.
Lo he reducido a la línea que fontspec_pass_args
contiene.
alguien mas tiene un problema similar?
EDITAR: Definitivamente un cambio en el código de especificación de fuente (dice este humilde usuario). Edité \__fontspec_pass_args:nnn
todos los lugares donde aparecía en mi propio código. Luego, para mis definiciones de fuentes, a diferencia de antes, necesitaba usar los corchetes de opción (incluso cuando no se necesitaba ninguna característica): \SetBaseFont[]{Some Font}
y ahora mi código se compila. Afortunadamente, sea lo que sea lo que haga el código del problema, no era algo que necesitara. Tenga en cuenta que utilicé un código similar para fuentes con definiciones mucho más simples, por lo que no se trata de \long\xdef
nada parecido.
MÁS EDITAR:
En el archivo de registro (una vez que compilé mi código, editándolo como se describe arriba) veo numerosos mensajes que se parecen a los siguientes. No recuerdo haberlos visto antes, pero tal vez simplemente no me di cuenta. Dado que TU
se relaciona con la especificación de fuente, aquí hay un ejemplo. En realidad, el problema fue detectado por microtipo. Todas las fuentes que uso son de tipo abierto:
Package microtype Warning: Unknown slot number of character
(microtype) `\textgreater '
(microtype) in font encoding `TU' in protrusion list
(microtype) `T1-default'.
Quizás eso esté relacionado, quizás no.
AÚN MÁS OTRA VEZ:
¡Mi pregunta realmente se responde sola! La razón que fontspec_pass_args
causa un error es simplemente que la última versión de fontspec (2.5c, de hace tres semanas) ya no tiene ese comando. Entonces, si otros no experimentan mi problema, es porque no están imitando el código de especificación de fuente anterior en su propio código. Pero los extraños mensajes sobre TU siguen ahí y son misteriosos.
Respuesta1
Hay dos aspectos de su pregunta:
El microtipo/TU se solucionará en una actualización de LaTeX2e prevista para algún momento muy pronto
Con respecto a su descifrado de código, lo remitiré a la guía de estilo de programación expl3 (l3styleguide.pdf):
Las funciones privadas (aquellas que comienzan
\__
) no deben usarse entre módulos.
Pero probablemente esa sea una explicación demasiado breve.:)
La \__fontspec_pass_args:nnn
función fue diseñada para manipular argumentos opcionales para que usted pudiera escribir
\fontspec[<options>]{fontname}
O
\fontspec{fontname}[<options>]
PERO NO
\fontspec[<options>]{fontname}[<options>]
Esto se vio, como debería decir,bastante desfavorablementeentre los Illuminati de LaTeX3 en la sala de chat tex.sx, porque va en contra de la filosofía general del xparse
paquete de proporcionar una forma consistente de lidiar con los argumentos de comando.
Así que me tomó un tiempo eliminarlo, tal vez desafortunadamente, y ahora fontspec
también permite la forma "doble opcional":
\fontspec[<options>]{fontname}[<options>]
Esto usa algo parecido a
\DeclareDocumentCommand \fontspec { O{} m O{} }
En el código de terceros, nadie debería haber necesitado replicar el comportamiento anterior proporcionado por \__fontspec_pass_args:nnn
.
De hecho, la API fontspec
proporciona una forma estándar de cargar fuentes sin utilizar \__
comandos internos. Si eso no proporciona lo que se necesita, no dude en presentar una solicitud de función en el repositorio de Github.