Skip to content

Bug della versione grafica 1.3b di MiKTeX su Windows 10 ( [email protected] @file non definito)

Questo dilemma può essere affrontato in vari modi, ma vi mostriamo quella che per noi è la soluzione più completa.

Soluzione:

Come indicato nella domanda, si tratta di un problema nel modo in cui MiKTeX ha integrato l'ultima modifica del kernel LaTeX. Il graphics è stato aggiornato ma non il kernel LaTeX, e questo porta all'errore.

Una soluzione temporanea consiste nell'aggiungere le definizioni necessarie al file sorgente: fortunatamente sono di piccole dimensioni

documentclass{article}
makeatletter
def[email protected]@file#1{%
  begingroup
    escapechar[email protected]
    xdef@[email protected]{expandafterstringcsname #1endcsname}%
  endgroup
}
def[email protected]#1{"[email protected]@name#1@gobble""}
def[email protected]@name#1"{#1[email protected]@name}
def[email protected]#1{[email protected]@name#1@gobble"}
makeatother
usepackage{graphics}

begin{document}

begin{figure}
   includegraphics{example-image-a}
end{figure}

end{document}

Naturalmente si spera che il kernel venga aggiornato a breve in MiKTeX.

Il nucleo di questo problema è stato risolto (il 2019-10-06) in MikTeX. ma poiché la situazione coinvolge i formati ed è complessivamente un po' complicata, ho scritto una guida all'indirizzo https://github.com/MiKTeX/miktex-packaging/issues/131 che spiega (approssimativamente) cosa sta succedendo e cosa si può fare se si soffre ancora di questo problema. Questa è copiata praticamente alla lettera da lì.

OK, questo si è rivelato un problema piuttosto complicato, poiché ci sono diverse cose in gioco.

Il cuore del problema: Pacchetti incompatibili

Il nocciolo del problema era il seguente. Il team di sviluppo di LaTeX ha rilasciato un aggiornamento del kernel di LaTeX (LaTeX base in ltxbase) insieme a diversi pacchetti di base (ad es. graphics, graphicx, amsmath). I pacchetti di base aggiornati sono destinati a funzionare con il kernel LaTeX aggiornato e alcuni necessitano della versione corretta per funzionare correttamente. Tra questi pacchetti fondamentali c'è graphics/graphicx.

I pacchetti e il kernel sono stati caricati su CTAN quasi contemporaneamente e sono arrivati in TeX live con la stessa serie di aggiornamenti. A causa di una sfortunata tempistica, solo graphics è stato aggiornato in MikTeX, lasciando il kernel LaTeX su una versione più vecchia. Utilizzando il file graphicx con il kernel più vecchio causa i messaggi di errore descritti in https://github.com/MiKTeX/miktex-packaging/issues/132, https://github.com/MiKTeX/miktex-packaging/issues/133 e qui (oltre a domande collegate e duplicati).

Il problema principale del server dei pacchetti MikTeX che distribuiva pacchetti incompatibili è stato risolto rapidamente il giorno successivo, il 2019-10-06 (UTC). Da allora il server ha distribuito il pacchetto base LaTeX più recente (2019-10-01) che corrisponde a graphics.

Il kernel LaTeX è speciale

Di solito quando un pacchetto viene aggiornato è sufficiente rinnovare il database dei nomi dei file per comunicare a TeX l'aggiunta o la rimozione dei file. Questo avviene automaticamente quando si usa la MikTeX Console per aggiornare o installare i pacchetti (lo stesso per TeX live tlmgr e amici), quindi l'utente medio non dovrà preoccuparsene.

Ma il kernel LaTeX è speciale. Definisce un formato TeX ed è direttamente incorporato nell'eseguibile, in modo che tutti i comandi LaTeX siano disponibili fin dall'inizio senza caricare alcun pacchetto (i comandi LaTeX possono essere utilizzati senza alcun usepackage direttamente dall'inizio). Ciò significa che non è sufficiente rinnovare il database dei nomi dei file quando il kernel viene aggiornato: anche i formati devono essere rigenerati e inseriti negli eseguibili. Anche in questo caso ciò dovrebbe avvenire automaticamente quando si usa MikTeX Console per aggiornare il pacchetto kernel LaTeX.

OK, quindi cosa posso fare?

Aggiornare in modalità amministratore e utente

Prima di tutto è necessario assicurarsi che il sistema MikTeX sia completamente aggiornato. Eseguire un aggiornamento (vedere https://tex.stackexchange.com/a/55473/35864). Se si dispone di un MikTeX multiutente, assicurarsi di eseguire l'aggiornamento in modalità utente. e Modalità amministratore.

Verificare che lxtbase sia aggiornato andando nella sezione Pacchetti nella Console di MikTeX e cercare ltxbase. La data di installazione deve essere 2019-10-06 o successiva e la data del pacchetto 2019-10-05. Se si dispone di un'installazione MikTeX multiutente, il pacchetto può essere installato solo in una delle due modalità. Non è necessario fare clic su installa nell'altra modalità, è sufficiente assicurarsi che sia aggiornato. quando viene installato.

In un mondo ideale dovrebbe essere così. I formati dovrebbero essere generati automaticamente come necessario durante l'aggiornamento e tutto dovrebbe funzionare.

Piccolo inciso: La distinzione admin-user è una fonte comune di problemi in MikTeX. Il programma di aggiornamento aggiornerà sempre e solo i pacchetti installati con il suo livello di autorizzazione. Se si ha un'installazione multiutente e si sono installati pacchetti con permessi sia di livello utente che di livello amministratore, i pacchetti potrebbero non essere sincronizzati se si aggiorna solo con un livello di permesso. Ogni volta che si verifica un problema legato all'aggiornamento, assicurarsi sempre di aggiornare il sistema in modalità amministratore e utente, spesso questo fa scomparire i problemi. (Naturalmente questo vale solo per le installazioni di MikTeX multiutente).

Controllare il formato

È possibile verificare il formato LaTeX eseguendo un semplice documento LaTeX come

documentclass{article}
begin{document}
Lorem
end{document}

Aprire il documento risultante .log e controllate le prime righe

This is pdfTeX, Version 3.14159265-2.6-1.40.20 (MiKTeX 2.9.7200 64-bit) (preloaded format=pdflatex 2019.10.12)  12 OCT 2019 11:42
entering extended mode
**./formatdate.tex
(formatdate.tex
LaTeX2e <2019-10-01>
("C:Program FilesMiKTeX 2.9tex/latex/basearticle.cls"
Document Class: article 2019/08/27 v1.4j Standard LaTeX document class

La parte importante è il punto

LaTeX2e <2019-10-01>

la data dovrebbe essere 2019-10-01 o superiore.

La data nel campo preloaded format=pdflatex 2019.10.12 nella primissima riga dovrebbe mostrare una data successiva al 2019-10-06.

È possibile utilizzare il comando

kpsewhich --engine=pdftex pdflatex.fmt

dal terminale per scoprire dove risiede il formato. La cartella può dare un'indicazione se si tratta di un formato controllato dall'utente o dall'amministratore. Questo è importante per il passo successivo. Se si tratta di C:/Users//AppData/Local/MiKTeX/2.9/miktex/data/le/pdftex/pdflatex.fmt il formato è controllato dall'utente, se il formato risiede in C:/ProgramData/MiKTeX/2.9/miktex/data/le/pdftex/pdflatex.fmt si tratta di un formato controllato dall'amministratore. Se il percorso del file non assomiglia a questi due esempi, è possibile che ci sia un formato spurio che si aggira da qualche parte.

Ricreare i formati

Se i formati non sono abbastanza nuovi, MikTeX non ha ricreato il formato durante l'aggiornamento oppure ha ricreato i formati, ma continua a rilevare le versioni più vecchie dei formati.

È possibile ricostruire i formati TeX come descritto in MiKTeX: Errore dopo l'aggiornamento: "Spiacenti, ma pdflatex non è riuscito". È necessario ricostruire tutti i formati che si desidera utilizzare (probabilmente almeno pdflatex, latex, xelatex, lualatex). È possibile selezionare semplicemente tutti i formati e ricostruirli, ma alcuni formati potrebbero produrre errori durante la ricostruzione. In questo caso, potrebbe essere necessario selezionare a mano i formati necessari.

Anche in questo caso, se si dispone di un'installazione multiutente, potrebbe essere necessario eseguire questa operazione in modalità amministratore e utente. In genere consiglio di ricostruire i formati prima in modalità amministratore (se si dispone dei diritti di amministratore) e solo successivamente, se ancora necessario, in modalità utente.

Nel caso in cui i formati in questione creino errori che non riuscite a risolvere o a capire durante la ricostruzione, ponete una domanda sul vostro forum TeX preferito e fornite sufficienti dettagli per far capire cosa avete fatto.

Se si ricostruiscono i formati e MikTeX non rileva ancora i formati corretti, MikTeX potrebbe essere mal configurato. Si tratta di un problema specifico che può essere diagnosticato solo con informazioni più dettagliate sul sistema. Anche in questo caso sarebbe meglio porre una domanda il più possibile dettagliata sul proprio forum TeX preferito.

Ultimi commenti

La soluzione della risposta di Joseph è intesa come una soluzione temporaneo temporanea. Non dovrebbe più essere necessario, dato che la versione corretta del kernel è ora disponibile in MikTeX. Si prega di non utilizzare più questo workaround. Assicurarsi invece che il formato venga aggiornato correttamente.

Per saperne di più su TeX formati, LaTeX ecc., date un'occhiata a http://www.tug.org/levels.html e a Qual è la differenza tra TeX e LaTeX? Overleaf ha un bell'articolo sui formati: https://www.overleaf.com/learn/latex/Articles/The_two_modes_of_TeX_engines:_INI_mode_and_production_mode.

Tra l'altro, nuovi programmi di installazione e simili probabilmente non saranno d'aiuto in questo caso, poiché si tratta di un problema puramente legato a ciò che accade dopo l'installazione. In effetti potrebbe non essere utile nemmeno rimuovere MikTeX e installare una nuova versione se i file problematici rimangono in directory non controllate da MikTeX. È quindi importante cercare di capire da dove viene il problema prima di procedere alla disinstallazione e alla reinstallazione.


MacTeX

Si è scoperto che esiste un problema correlato in MacTeX (che è basato su TeX live e non su MikTeX): ´Includegraphics non funziona su MacTeX 2019? Gli aggiornamenti in MacTeX non attivano la ricostruzione del formato, il che significa che anche se tutti i pacchetti sono aggiornati si potrebbe rimanere bloccati con un formato LaTeX più vecchio. In questo caso

fmtutil-sys --all

dovrebbe aiutare a risolvere il problema.

Una discussione più dettagliata sui motivi per cui ciò è necessario si trova in https://tug.org/pipermail/tex-live/2019-October/044119.html.

Uso del pacchetto use graphicx (che chiama graphics) invece di graphics funziona bene con MikTeX recente (appena aggiornato):

documentclass{article}
usepackage[demo]{graphicx} % <--- in real document remove option "demo"

begin{document}

begin{figure}
   includegraphics{MC_Antenna_Gain}
end{figure}

end{document}

risultato:

enter image description here



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.