Skip to content

Rendi gestibile la distribuzione su Windows (tlmgr è un .bat) - #9

Merged
Francy2009 merged 3 commits into
mainfrom
claude/tinytex-install-error-y6siar
Aug 10, 2026
Merged

Rendi gestibile la distribuzione su Windows (tlmgr è un .bat)#9
Francy2009 merged 3 commits into
mainfrom
claude/tinytex-install-error-y6siar

Conversation

@Francy2009

Copy link
Copy Markdown
Owner

Il problema

Su Windows la distribuzione veniva installata correttamente, ma restava inutilizzabile: la pagina Pacchetti diceva "questa distribuzione non è gestibile", htlatex risultava assente e il registro passava da "Distribuzione installata" a "Pronto" senza scaricare un solo pacchetto.

TeX Live su Windows installa tlmgr come tlmgr.bat, mentre il rilevamento cercava solo tlmgr.exe. Non trovandolo, rilevaTeX restituiva tlmgr: null, e in main.js l'installazione dei pacchetti di base sta dentro un if (tex.tlmgr): veniva saltata in silenzio. Da lì tutto il resto, htlatex compreso (arriva con tex4ht, uno dei pacchetti mai installati).

Le correzioni

Rilevamento ed esecuzione (desktop/latex.js)

  • I comandi si cercano provando tutti i suffissi eseguibili (.exe, .bat, .cmd, nessuno) invece di assumere .exe.
  • Trovarli non basta: spawn/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\...).
  • Fuori da Windows il comportamento è identico a prima: la lista dei suffissi è [''] e gli argomenti passano invariati.

Sicurezza

  • Il passaggio per cmd.exe va fatto con attenzione: cmd non 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.
  • cercaPacchetto era l'unica funzione che passava a tlmgr una stringa dell'utente senza validarla (installaPacchetto e rimuoviPacchetto hanno già un'allowlist): ora il termine di ricerca è ripulito tenendo solo i caratteri che compaiono nei nomi dei pacchetti.

Conseguenze visibili

  • Se dopo l'installazione tlmgr non c'è, il registro lo dice invece di chiudere con "Pronto" nascondendo una distribuzione a metà.
  • La pagina Pacchetti non annuncia più "stai usando il LaTeX di sistema" a chi ha installato la copia gestita da texforge: il messaggio ora distingue le due origini.

Documentazione

  • README e sito spiegano che il PDF si compila anche su Overleaf, senza installare niente: .tex + quizstruct.sty nella stessa cartella del progetto, compilatore pdfLaTeX. Il pacchetto usa solo dipendenze standard (amsmath, amssymb, xcolor, enumitem, pgffor), già presenti lì, e quiz.cfg/quiz.js/quiz.css non servono perché riguardano il solo HTML.
  • Detto esplicitamente il confine fra i due output: l'HTML interattivo richiede htlatex e si ottiene solo con l'app.
  • overleaf.com aggiunto all'allowlist del controllo CI sui domini esterni: senza, il link nuovo avrebbe fatto fallire la build.

Verifica

Fatto:

  • costruzione della riga di comando provata simulando Windows e Linux: .bat citato correttamente anche con spazi nel percorso, .exe e piattaforme non-Windows lasciati intatti;
  • rifiuto degli argomenti con virgolette e pulizia del termine di ricerca provati sui casi ostili;
  • controllo sintattico dei file toccati, struttura HTML del sito validata, controllo CI sui domini eseguito localmente (verde).

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-latest renderebbe visibile questa classe di problemi senza doverli scoprire dall'app.


Generated by Claude Code

claude added 3 commits August 10, 2026 08:37
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
@Francy2009
Francy2009 merged commit d4af5b1 into main Aug 10, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants