Aggiornamento al nuovo plugin di matematica

Ho ancora installato il vecchio plugin “Discourse Mathjax”. Qualcuno è riuscito a convertire i propri post per visualizzarli correttamente con il nuovo plugin? Saresti così gentile da pubblicare un comando funzionante?

I due plugin non sono compatibili al 100%, poiché alcuni contenuti verranno danneggiati se attivo semplicemente il nuovo.

Ad esempio, il nuovo plugin richiede il doppio $$ prima e dopo i blocchi \\begin{...}...\\end{...}, ad esempio \\begin{align}...\\end{align} (senza il doppio $$) viene renderizzato come matematica con il vecchio plugin ma non con il nuovo.

Per convertirli, dovrei estrarre tutto il contenuto ed eseguire una ricerca-sostituzione con espressioni regolari per aggiungere/rimuovere il doppio $$ prima/dopo \\begin{..}/\\end{..} (ma blocchi annidati come questi sarebbero un problema). Potrebbero esserci altri casi in cui il contenuto apparirà danneggiato che non ho ancora notato (è un forum di 5 anni con molta matematica).

1 Mi Piace

Bene, ho speso più di quanto vorrei ammettere per convertire e correggere contenuti danneggiati dopo l’aggiornamento al nuovo plugin matematico, quindi pubblico qui i comandi importanti che ho utilizzato (scusate l’hackery grezzo, ero troppo pigro). Era ancora necessaria una correzione manuale di alcuni contenuti, ma nel nostro caso non molta.

NOTA: Questo è a scopo ispirativo. Ricorda la poesia “Non mi assumo alcuna responsabilità…”. Non eseguire questo codice alla cieca se non lo capisci.

# sostituisci \\ in \ (che traduce anche \\\\ in \\)
Post.where('raw ~ ?', "\\\\\\\\").each{|p| p.raw=p.raw.gsub(/\\\\\\\\/, "\\\\"); p.save; print "."; $stdout.flush;}; puts "";

# sostituisci {align} con {aligned} e rimuovi tutte le versioni con asterisco
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{align.*?\\}/, "\\\\1{aligned}"); p.save; print "."; $stdout.flush;}; puts "";

# sostituisci {array} con {matrix} e rimuovi tutte le versioni con asterisco
Post.where('raw ~ ?', "\\\\begin\\{array").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{array\\*?\\}/, "\\\\1{matrix}"); p.save; print "."; $stdout.flush;}; puts "";

# sostituisci `\begin{equation}` con `$$`
Post.where('raw ~ ?', "\\\\begin\\{equation").each{|p| p.raw=p.raw.gsub(/\s*\\(begin|end)\\{equation\\*?\\}\s*/, "$$"); p.save; print "."; $stdout.flush;}; puts "";

# aggiungi nuove righe prima e dopo `$$`
Post.where('raw ~ ?', "\\$\\$").each{|p| p.raw=p.raw.gsub(/\$\$/,"\n$$\n"); p.save; print "."; $stdout.flush;}; puts "";

# aggiungi `$$` prima e dopo i blocchi `{aligned}`
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/\s*(\\begin\{align\})/m,"\n$$\n\\1").gsub(/(\\end\{align.*?\}})\s*/m,"\\1\n$$\n"); p.save; print "."; $stdout.flush;}; puts "";

# ... correggi i doppi `$$` in `{aligned}`
Post.where('raw ~ ?', "\\\\begin\\{aligned").each{|p| p.raw=p.raw.gsub(/(\\end\{align.*?\}\n\$\$)\n\$\$/,"\\1").gsub(/\$\$\n(\$\$\n\\begin\{align\})/,"\\1"); p.save; print "."; $stdout.flush;}; puts "";

## applica i due comandi precedenti ad altri ambienti che potresti avere oltre a {aligned}

# CORREZIONE MANUALE RACCOMANDATA PER QUANTO SEGUE:
# Post in cui `$$` appaiono nell'ambiente quotato `> `. Solo i `$$` di apertura e
# chiusura devono essere preceduti, cioè `> $$`, il contenuto intermedio non deve esserlo
# altrimenti viene renderizzato come segni di maggiore-uguale matematici.
# Esegui questo per identificare i post:
Post.where('raw ~ ?', ">\s*\n\s*\$\$").each{|p| puts "https://discourse.domain.com/p/#{p.id}";};

# ... OPPURE, esegui questo per tentare una correzione automatizzata, sebbene rischiosa
# (ha funzionato bene per noi, alcuni post hanno richiesto ulteriore lavoro manuale):
Post.where('raw ~ ?', ">\s*\n\s*\$\$").each{|p| p.raw=p.raw.gsub(/(\>\s*)\$\$(.*?)\$\$\s*?\n/m,"\\1>\n$$\\2>\n$$\n>"); p.save; print "."; $stdout.flush;}; puts "";

# Cosmetico, opzionale: sostituisci 3+ nuove righe consecutive con 2 nuove righe
Post.where('raw ~ ?', "\\n{3,}").each{|p| p.raw=p.raw.gsub(/\n{3,}/,"\n\n"); p.save; print "."; $stdout.flush;}; puts "";

# Opzionale: sostituisci 2+ nuove righe consecutive prima e dopo `$$`
# con una singola nuova riga
# ATTENZIONE: va bene nella versione attuale del plugin, ma potrebbe essere visualizzato
# diversamente in una versione futura (?). Ad esempio, in Latex reale, una riga vuota
# dopo $$ prima del testo fa una differenza nello spazio verticale.
Post.where('raw ~ ?', "\\n\\$\\$\\n{2,}|\\n{2,}\\$\\$").each{|p| p.raw=p.raw.gsub(/\n\$\$\n{2,}/,"\n$$\n").gsub(/\n{2,}\$\$/,"\n$$"); p.save; print "."; $stdout.flush;}; puts "";
2 Mi Piace

@sam dato che questo plugin è ora ufficiale, potremmo per favore far funzionare correttamente anche la funzionalità “Quote”? Quando si seleziona testo con matematica e poi si utilizza il pulsante “Quote”, attualmente ottengo tutta la matematica rimossa e raddoppiata. Il codice javascript per la funzionalità “Quote” potrebbe riconoscere i tag html della matematica e aggiungere i necessari $ e/o $$ nella casella di modifica, invece di rimuoverli e raddoppiare la stringa matematica.

Inoltre, penso che sarebbe bello includere una versione più recente di Katex nel plugin. Quella inclusa ha più di 2 anni, 0.11, mentre la versione stabile di Katex è la 0.15.2, che è più ricca e ha molte correzioni di bug. Sono a conoscenza del readme ma pochi se ne preoccuperanno.

Anche Mathjax 3.x sarebbe bello (molto più veloce di 2.7)

EDIT: Esiste un aggiornamento molto più semplice di Katex incluso che non richiede la compilazione di Katex da sorgente. Basta scaricare il tarball, copiare i file, sostituire la cartella dei font nel css.

wget -O- https://github.com/KaTeX/KaTeX/releases/latest/download/katex.tar.gz | tar -zx
cp katex/fonts/*.woff* /path/to/discourse/plugins/discourse-math/public/katex/fonts/
cp katex/katex.min.* katex/contrib/mhchem.min.js /path/to/discourse/plugins/discourse-math/public/katex/
sed -i "s~url(fonts/~url(/plugins/discourse-math/katex/fonts/~g" /path/to/discourse/plugins/discourse-math/public/katex/katex.min.css
5 Mi Piace

Tutto questo sembra ottimo, c’è qualche possibilità che tu possa inviare alcune PR per questo?

3 Mi Piace

Creata una PR per l’aggiornamento di KaTeX e l’ho anche aggiornata all’ultima release. Non uso MathJax personalmente, quindi non mi sono ancora preoccupato di quello. Alla fine Discourse potrebbe voler consentire il collegamento a una CDN per questi (consentire all’utente di specificare l’URL in modo che possa correggere una versione rilasciata se lo desidera; impostare come predefinito l’host corrente) anche se va un po’ contro l’ethos di Discourse, poiché queste librerie vengono aggiornate molto spesso con correzioni e altro.\n\nPurtroppo, non ho tempo per una PR per la correzione della funzionalità “Quote” – sono troppo sommerso dal lavoro in questi giorni, motivo per cui ho lasciato un messaggio sperando che qualcun altro possa occuparsene.

4 Mi Piace

Grazie mille per la PR @nordize l’ho unita!

5 Mi Piace

Ricordo che questo thread conteneva molti messaggi e discussioni: cosa è successo?

Sono venuto ad aggiungere alcune note al mio ultimo contributo che ho fatto all’inizio di quest’anno, nonché un miglioramento per consentire alle macro di persistere tra le espressioni matematiche con Katex (vedi qui). Sono nel thread sbagliato?

I post in questo argomento sono impostati su un timer automatico per eliminarli, ma posso recuperarne alcuni se desideri spostarli in un argomento in stile Suggerimenti e trucchi?

Ma perché?!? Questo plugin è importante ed è uno dei più popolari. La discussione in questo argomento conteneva molti post di interesse. Ho scritto almeno una guida in un post e mi fidavo che sarebbe stata lì per consultarla. Io e i miei colleghi abbiamo persino aggiunto ai preferiti alcuni dei post… e ora è tutto sparito?

Questa è una decisione molto strana. Non era uno degli scopi di Discourse essere in grado di gestire argomenti lunghi (caricamento adattivo e tutto il resto, ecc.)? “eliminarli”… di sicuro non ci manca spazio! Al giorno d’oggi, la conservazione delle informazioni è più importante. Non capisco davvero tali decisioni poiché non siamo più negli anni '90, e in pratica dice che l’onere è ancora sull’individuo di salvare le informazioni e fare salti mortali per condividerle da fonti locali, perché potrebbero scomparire in qualsiasi momento da dove sono state pubblicate online, il che incoraggia sprechi, fastidi, attenzione e organizzazione non necessarie, e diminuisce la fiducia e l’affidabilità. Aiutare gli utenti della community diventa inefficiente e problematico anche se le informazioni vengono cancellate dopo 1 mese. Questo vanifica parecchi scopi. Dovevamo andare nella direzione opposta.

Non è una questione di vita o di morte, ovviamente, non voglio esagerare, ma comunque… Potreste ripristinarlo completamente e magari riconsiderare questa politica di 1 mese per il futuro?

Comunque, @sam - ho creato questa PR: https://github.com/discourse/discourse-math/pull/51 che incoraggio a unire perché Mathjax lo fa di default, quindi le persone che passano da Mathjax a Katex avrebbero contenuti non funzionanti. Lo stesso vale per le persone che aggiornano dal vecchio plugin.

1 Mi Piace

Perché mai?!? Questo plugin è importante ed è uno dei più popolari. La discussione in questo topic conteneva molti post di interesse. Ho scritto almeno una guida in un post e mi fidavo che sarebbe stata lì per consultarla. Io e i miei colleghi abbiamo anche aggiunto ai preferiti alcuni post… e ora è tutto sparito?
[/quote]

Avrei potuto dirlo in modo più delicato. :slightly_smiling_face:

Speriamo (se tutto va bene :crossed_fingers:) che qualsiasi informazione utile/discussione interessante sia stata spostata nell’OP o separata in un nuovo topic. C’è la possibilità che ciò non accada sempre, ma sono felice di dare un’occhiata e controllare. :+1:

2 Mi Piace

Certo, forse non abbastanza caffè… ma è fantastico scoprire che le cose in cui si investe tempo (a fin di bene per una comunità) vengono buttate via. Immagino che avrei dovuto salvare la guida e gli script che ho scritto per l’aggiornamento dal vecchio plugin, così come gli altri post che mi interessavano, e poi sperare che le persone mi chiedessero aiuto via email. Chi l’avrebbe mai detto che pubblicarli sul forum della comunità sarebbe stata l’opzione più rischiosa. Sì, non abbastanza caffè…

Nessuna di queste cose è successa qui, per quanto ne sappia.

Riportare indietro l’argomento sarebbe troppo…? Decisamente non abbastanza caffè! :slight_smile:

1 Mi Piace

Penso di aver preso quelli giusti? Li ho spostati dall’area del timer automatico a Support, quindi dovrebbero essere al sicuro da qualsiasi cancellazione. :+1: Ci sono modifiche o aggiustamenti che vuoi che apporti?