Rendi gestibile la distribuzione su Windows (tlmgr è un .bat) - #9
Merged
Conversation
Su Windows TeX Live installa tlmgr come tlmgr.bat, ma il rilevamento cercava solo tlmgr.exe. Non trovandolo, rilevaTeX restituiva tlmgr: null e l'installazione dei pacchetti di base in main.js — che sta dentro un if (tex.tlmgr) — veniva saltata senza dire niente: il registro passava da "Distribuzione installata" a "Pronto" con la distribuzione a metà, la pagina Pacchetti restava inattiva e htlatex non c'era. Ora i comandi si cercano provando tutti i suffissi eseguibili (.exe, .bat, .cmd, nessuno) invece di assumere .exe. Non basta però trovarli: spawn ed execFile non sanno eseguire uno script .bat, quindi i comandi che lo sono passano per cmd.exe con la riga citata a mano, perché i percorsi possono contenere spazi (C:\Users\Nome Cognome\...). Le due conseguenze visibili sono sistemate a loro volta: se dopo l'installazione tlmgr non c'è, il registro lo dice invece di chiudere con "Pronto", e la pagina Pacchetti non annuncia più "stai usando il LaTeX di sistema" a chi ha installato la copia gestita da texforge. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017W5az9Prp2cseUs6W4zi2N
Due cose separate. Sicurezza. Il passaggio dei comandi .bat per cmd.exe, introdotto per far funzionare tlmgr su Windows, componeva una riga di comando testuale raddoppiando le virgolette. Ma cmd non le tratta come virgolette letterali: le doppie chiudono e riaprono la citazione, e da lì in poi &, | e > tornano metacaratteri attivi. cercaPacchetto è l'unica funzione che passa a tlmgr una stringa dell'utente senza validarla (installa e rimuovi hanno l'allowlist), quindi un termine di ricerca come x"&calc&"x sarebbe finito eseguito. Ora un argomento che contiene virgolette viene rifiutato invece di essere citato male, e il termine di ricerca è ripulito a monte tenendo solo i caratteri che compaiono nei nomi dei pacchetti. Documentazione. Il PDF si può compilare anche su Overleaf, senza installare niente: bastano il .tex e quizstruct.sty nella stessa cartella del progetto, compilatore pdfLaTeX. Il pacchetto usa solo dipendenze standard, già presenti lì, e quiz.cfg/quiz.js/quiz.css non servono perché riguardano il solo HTML. Detto esplicitamente anche il confine fra i due output: l'HTML interattivo richiede htlatex e si ottiene solo con l'app. README e sito, con voce di menu e alternanza degli sfondi sistemata. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017W5az9Prp2cseUs6W4zi2N
Il controllo CI rifiuta i link esterni non previsti, e la nuova sezione su Overleaf ne aggiunge uno: senza questa riga la build diventa rossa. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017W5az9Prp2cseUs6W4zi2N
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Il problema
Su Windows la distribuzione veniva installata correttamente, ma restava inutilizzabile: la pagina Pacchetti diceva "questa distribuzione non è gestibile",
htlatexrisultava assente e il registro passava da "Distribuzione installata" a "Pronto" senza scaricare un solo pacchetto.TeX Live su Windows installa
tlmgrcometlmgr.bat, mentre il rilevamento cercava solotlmgr.exe. Non trovandolo,rilevaTeXrestituivatlmgr: null, e inmain.jsl'installazione dei pacchetti di base sta dentro unif (tex.tlmgr): veniva saltata in silenzio. Da lì tutto il resto,htlatexcompreso (arriva contex4ht, uno dei pacchetti mai installati).Le correzioni
Rilevamento ed esecuzione (
desktop/latex.js).exe,.bat,.cmd, nessuno) invece di assumere.exe.spawn/execFilenon sanno eseguire uno script.bat, quindi i comandi che lo sono passano percmd.exe, con la riga citata a mano perché i percorsi possono contenere spazi (C:\Users\Nome Cognome\...).['']e gli argomenti passano invariati.Sicurezza
cmd.exeva fatto con attenzione:cmdnon ha modo di rappresentare una virgoletta dentro una stringa citata — raddoppiarla non la rende letterale, chiude e riapre la citazione, e da lì&,|e>tornano metacaratteri attivi. Un argomento che contiene virgolette viene quindi rifiutato, invece di essere citato male.cercaPacchettoera l'unica funzione che passava atlmgruna stringa dell'utente senza validarla (installaPacchettoerimuoviPacchettohanno già un'allowlist): ora il termine di ricerca è ripulito tenendo solo i caratteri che compaiono nei nomi dei pacchetti.Conseguenze visibili
tlmgrnon c'è, il registro lo dice invece di chiudere con "Pronto" nascondendo una distribuzione a metà.Documentazione
.tex+quizstruct.stynella stessa cartella del progetto, compilatore pdfLaTeX. Il pacchetto usa solo dipendenze standard (amsmath,amssymb,xcolor,enumitem,pgffor), già presenti lì, equiz.cfg/quiz.js/quiz.cssnon servono perché riguardano il solo HTML.htlatexe si ottiene solo con l'app.overleaf.comaggiunto all'allowlist del controllo CI sui domini esterni: senza, il link nuovo avrebbe fatto fallire la build.Verifica
Fatto:
.batcitato correttamente anche con spazi nel percorso,.exee piattaforme non-Windows lasciati intatti;Non fatto: nessuna esecuzione su Windows. È il sistema su cui il bug si manifesta e non era disponibile in questo ambiente; la CI del progetto gira solo su
ubuntu-latest, quindi non copre questo caso. Prima di taggare una nuova versione conviene installare la build su Windows e controllare che il registro dica "Installo i pacchetti di base…" invece di saltare direttamente a "Pronto".Suggerimento a margine, fuori dallo scopo di questa PR: un job di CI su
windows-latestrenderebbe visibile questa classe di problemi senza doverli scoprire dall'app.Generated by Claude Code