Skip to content

Rendi leggibile l'HTML prodotto da htlatex - #10

Merged
Francy2009 merged 1 commit into
mainfrom
claude/html-resa-grafica
Aug 10, 2026
Merged

Rendi leggibile l'HTML prodotto da htlatex#10
Francy2009 merged 1 commit into
mainfrom
claude/html-resa-grafica

Conversation

@Francy2009

Copy link
Copy Markdown
Owner

Il problema

L'HTML usciva brutto, e non per questioni di gusto: l'uscita di tex4ht arrivava all'utente quasi grezza. Tre cause distinte.

1. Le formule diventavano immagini, e le immagini si perdevano

quiz.cfg apriva con \Preamble{xhtml}, senza mathml: tex4ht rende frazioni, integrali e radici come file PNG separati. Ma rendiHtmlAutonomo incorporava solo CSS e JavaScript, nessuno copiava le immagini, e main.js cancella la cartella di lavoro appena finito. Nel file salvato quelle formule erano riquadri rotti — proprio in matematica.tex e fisica-lezione.tex, che di formule sono pieni.

Ora quiz.cfg chiede mathml: le formule restano testo, selezionabile, impaginato dal browser. Per quel che può restare (una figura inclusa dall'utente) le immagini locali vengono incorporate come data: URI, così "autosufficiente" è vero.

2. I caratteri non arrivavano mai

quiz.css chiedeva IBM Plex Sans, Source Serif 4, IBM Plex Mono senza @font-face e senza poterli scaricare — giustamente, il file deve restare offline e autosufficiente. Su una macchina qualunque si ripiegava su Arial e Times: la grafica progettata non la vedeva nessuno. Incorporare i font avrebbe aggiunto più di un megabyte a ogni compito, quindi gli elenchi ora proseguono con caratteri presenti su ogni sistema e scelti per somigliare ai primi.

3. Il CSS di tex4ht litigava col nostro

tex4ht assegna un carattere a ogni pezzo di testo, con classi per font TeX (ec-lmr-10) e con style= inline, che batte qualsiasi foglio. Ora teniamo la sua struttura — rientri, tabelle, allineamenti — e scartiamo le sole dichiarazioni tipografiche, sia dal foglio sia dagli attributi inline.

Impaginazione

Il foglio stilava solo gli elementi del quiz: la parte discorsiva di una lezione usciva larga quanto la finestra, senza gerarchia. Ora:

  • una colonna di misura leggibile per tutto il documento, non solo per i quiz;
  • titoli, paragrafi, elenchi, tabelle (che scorrono per conto loro invece di sfondare la pagina), codice, formule in blocco;
  • stampa: via i comandi interattivi e le correzioni già a video — quello che si stampa è il compito da svolgere — e le domande non si spezzano fra due pagine;
  • telefono: colonna stretta senza il bollino dei punti sopra al testo, aree di tocco più grandi;
  • focus da tastiera visibile su opzioni, tendine e bottoni;
  • adeguamento al tema scuro del sistema.

Le classi su cui quiz.js fa presa (.question-block, label.option.correct/.wrong, .feedback, .risultato, .quiz-controls, .calcola-btn, .riprova-btn) sono invariate.

Verifica

Aggiunte prove automatiche (src/html-autonomo.test.mjs, npm test, eseguite in CI) su un documento che riproduce le stranezze vere di tex4ht — prefisso di namespace sul MathML, classi per font TeX, style= inline, immagini accanto al file. Verificano che il MathML resti leggibile una volta salvato come .html, che le dichiarazioni tipografiche spariscano ma margin/text-align restino, che il nostro foglio venga per ultimo, e che le immagini locali finiscano dentro al file mentre gli URL remoti restano intatti. 7 su 7 verdi, e non serve LaTeX per eseguirle.

Quello che non ho potuto verificare: l'aspetto finale. Qui non c'è LaTeX né un browser, quindi non ho mai visto un HTML vero prodotto da questa catena. Le trasformazioni sono verificate sul testo; il giudizio su come appare resta tuo, ed è il motivo per cui vale la pena compilare matematica.tex e lezione.tex prima di mergiare.

Una nota su MathML: lo supportano nativamente Chrome, Safari e Firefox aggiornati. Se dovessi trovare una resa storta su un browser vecchio, l'alternativa è passare a mathjax in quiz.cfg, che però richiede uno script esterno e romperebbe l'autosufficienza del file.


Generated by Claude Code

L'uscita di tex4ht arrivava all'utente quasi grezza, e si vedeva. Tre cause
distinte, tutte risolte qui.

Formule come immagini. Senza l'opzione mathml, tex4ht rende frazioni,
integrali e radici come PNG separati: sgranati e non selezionabili, ma
soprattutto perduti, perché rendiHtmlAutonomo incorporava solo CSS e
JavaScript e la cartella di lavoro viene cancellata a fine compilazione. Nel
file salvato restavano riquadri rotti — proprio negli esempi di matematica e
fisica, che di formule sono pieni. Ora quiz.cfg chiede mathml e le formule
restano testo; per quel che resta (una figura inclusa dall'utente) le
immagini locali diventano data: URI, così "autosufficiente" è vero.

Caratteri mai arrivati. quiz.css chiedeva IBM Plex Sans, Source Serif 4 e
IBM Plex Mono senza @font-face e senza poterli scaricare: su una macchina
qualunque si ripiegava su Arial e Times, e la grafica progettata non si
vedeva. Gli elenchi ora proseguono con caratteri presenti su ogni sistema e
scelti per somigliare ai primi.

CSS di tex4ht in conflitto. Assegna un font a ogni pezzo di testo, con
classi per font TeX e con style= inline, che batte qualsiasi foglio. Ora
teniamo la sua struttura — rientri, tabelle, allineamenti — e scartiamo le
sole dichiarazioni tipografiche.

Sull'impaginazione: il foglio stilava solo gli elementi del quiz, quindi la
parte discorsiva di una lezione usciva larga quanto la finestra. Ora c'è una
colonna di misura leggibile per tutto il documento, con titoli, paragrafi,
elenchi e tabelle (che scorrono invece di sfondare la pagina), stampa senza
comandi interattivi né correzioni a video, adattamento al telefono, focus
da tastiera visibile e adeguamento al tema scuro.

Le trasformazioni sono coperte da prove automatiche su un documento che
riproduce le stranezze vere di tex4ht: non serve LaTeX per eseguirle, e
girano in CI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017W5az9Prp2cseUs6W4zi2N
@Francy2009
Francy2009 merged commit dd81c58 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