Bueno, gasté más de lo que me gusta admitir para convertir y arreglar contenido roto después de actualizar al nuevo plugin de matemáticas, así que publico aquí los comandos importantes que usé (disculpen la fea chapuza, me dio pereza). Todavía fue necesaria una corrección manual del contenido, pero no tanta en nuestro caso.
NOTA: Esto es a título inspirador. Recuerda el poema “No asumo ninguna responsabilidad…”. No ejecutes esto a ciegas si no lo entiendes.
# reemplazar \\\\ en \\ (lo que también traduce \\\\\\\\ en \\\\)
Post.where('raw ~ ?', "\\\\\\\\").each{|p| p.raw=p.raw.gsub(/\\\\\\\\/, "\\\\"); p.save; print "."; $stdout.flush;}; puts "";
# reemplazar {align} con {aligned} y eliminar todas las versiones 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 "";
# reemplazar {array} con {matrix} y eliminar todas las versiones 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 "";
# reemplazar `\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 "";
# añadir nuevas líneas antes y después de `$$`
Post.where('raw ~ ?', "\\$\\$").each{|p| p.raw=p.raw.gsub(/\$\$/,"\n$$\n"); p.save; print "."; $stdout.flush;}; puts "";
# añadir `$$` antes y después de bloques `{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 "";
# ... corregir `$$` dobles en `{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 "";
## aplicar los dos comandos anteriores a otros entornos que puedas tener además de {aligned}
# CORRECCIÓN MANUAL RECOMENDADA PARA LO SIGUIENTE:
# Publicaciones donde `$$` aparecen en un entorno citado `> `. Solo se deben prefijar los `$$` de apertura y
# cierre, es decir, `> $$`, el contenido intermedio no debe serlo
# o de lo contrario se renderizará como signos de mayor que de matemáticas.
# Ejecuta esto para identificar las publicaciones:
Post.where('raw ~ ?', ">\s*\n\s*\$\$").each{|p| puts "https://discourse.domain.com/p/#{p.id}";};
# ... O, ejecuta esto para intentar una corrección automática, aunque sea arriesgada
# (funcionó bien para nosotros, algunas publicaciones necesitaron más trabajo manual):
Post.where('raw ~ ?', ">\s*\n\s*\$\$").each{|p| p.raw=p.raw.gsub(/(\>\s*)\$\$(.*?)\$\$\s*?\n/m,"\\\\1>\$\$ \\\\2 > $$\n> "); p.save; print "."; $stdout.flush;}; puts "";
# Cosmético, opcional: reemplazar 3+ saltos de línea consecutivos con 2 saltos de línea
Post.where('raw ~ ?', "\\n{3,}").each{|p| p.raw=p.raw.gsub(/\n{3,}/,"\n\n"); p.save; print "."; $stdout.flush;}; puts "";
# Opcional: reemplazar 2+ saltos de línea consecutivos antes y después de `$$`
# con un solo salto de línea
# ADVERTENCIA: está bien en la versión actual del plugin, pero puede mostrarse
# de manera diferente en una versión futura (?). Por ejemplo, en Latex real, una línea vacía
# después de $$ antes del texto sí marca una diferencia en el espaciado vertical.
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 "";