nordize
(Nordize)
1
古い「Discourse Mathjax」プラグインがまだインストールされています。新しいプラグインで投稿を正しく表示できるように変換できた方はいらっしゃいますか? 動作するコマンドラインを投稿していただけますでしょうか。
2つのプラグインは100%互換性があるわけではなく、新しいプラグインを有効にするだけでは一部のコンテンツが壊れてしまいます。
例えば、新しいプラグインでは \\begin{...}...\\end{...} ブロックの前に二重の $$ が必要です。例えば \\begin{align}...\\end{align} (二重の $$ なし)は、古いプラグインでは数式としてレンダリングされますが、新しいプラグインではレンダリングされません。
それらを変換するには、すべてのコンテンツをスクレイピングし、\\begin{..}/\\end{..} の前後に二重の $$ を追加/削除する正規表現の検索置換を行う必要があります(ただし、ネストされたブロックは問題になる可能性があります)。まだ気づいていない他のケースでコンテンツが壊れて表示される可能性もあります(5年前のフォーラムで、かなりの量の数学があります)。
「いいね!」 1
nordize
(Nordize)
2
新しい数式プラグインにアップグレードした後、壊れたコンテンツを変換して修正するために、信じられないほど多くの時間を費やしました。そのため、使用した重要なコマンドをここに投稿します(醜いハックはご容赦ください。あまりにも面倒でした)。コンテンツの手動修正もまだ必要でしたが、私たちのケースではそれほど多くありませんでした。
注意: これはインスピレーションを目的としています。「責任は負いません…」という詩を思い出してください。理解せずに盲目的に実行しないでください。
# \\\\を\\に置換します(\\\\\\\\を\\\\に変換します)
Post.where('raw ~ ?', "\\\\\\\\").each{|p| p.raw=p.raw.gsub(/\\\\\\\\/, "\\\\"); p.save; print "."; $stdout.flush;}; puts "";
# {align}を{aligned}に置換し、すべてのスター付きバージョンを削除します
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{align.*?\\}/, "\\\\1{aligned}"); p.save; print "."; $stdout.flush;}; puts "";
# {array}を{matrix}に置換し、すべてのスター付きバージョンを削除します
Post.where('raw ~ ?', "\\\\begin\\{array").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{array\\*?\\}/, "\\\\1{matrix}"); p.save; print "."; $stdout.flush;}; puts "";
# `\\begin{equation}`を`$$`に置換します
Post.where('raw ~ ?', "\\\\begin\\{equation").each{|p| p.raw=p.raw.gsub(/\\s*\\\\(begin|end)\\{equation\\*?\\}\\s*/, "$$"); p.save; print "."; $stdout.flush;}; puts "";
# `$$`の前後に改行を追加します
Post.where('raw ~ ?', "\\$\\$").each{|p| p.raw=p.raw.gsub(/\$\$/,"\\n$$\\n"); p.save; print "."; $stdout.flush;}; puts "";
# `{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 "";
# ... `{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 "";
## 上記2つのコマンドを、{aligned}以外の他の環境にも適用します
# 以下は手動修正を推奨します:
# `$$`が引用された`> `環境内に現れる投稿。開始と
# 終了の`$$`のみにプレフィックスを付ける必要があります。つまり、`> $$`です。
# その間のコンテンツはそうすべきではありません。
# そうしないと、数学のより大きい記号としてレンダリングされます。
# 投稿を特定するにはこれを実行します:
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| puts "https://discourse.domain.com/p/#{p.id}";};
# ... または、自動修正を試すにはこれを実行します。ただしリスクがあります
# (私たちにとってはうまくいきましたが、いくつかの投稿はさらに手動での作業が必要でした):
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| p.raw=p.raw.gsub(/(\u003e\s*)\$\$(.*?)\$\$\s*?\n/m,"\\1\u003e $$\\2\u003e $$\n\u003e"); p.save; print "."; $stdout.flush;}; puts "";
# 化粧品、オプション: 3つ以上の連続した改行を2つの改行に置換します
Post.where('raw ~ ?', "\\n{3,}").each{|p| p.raw=p.raw.gsub(/\n{3,}/,"\n\n"); p.save; print "."; $stdout.flush;}; puts "";
# オプション: `$$`の前後の2つ以上の連続した改行を
# 単一の改行に置換します
# 警告: 現在のプラグインバージョンでは問題ありませんが、将来のバージョンでは
# 異なる表示になる可能性があります(?)。たとえば、実際のLaTeXでは、
# テキストの前の`$$`の後の空行は垂直スペーシングに違いをもたらします。
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
nordize
(Nordize)
3
@sam このプラグインは公式になったので、「引用」機能も正しく動作するようにしていただけないでしょうか?数式を含むテキストを選択してから「引用」ボタンを使用すると、現在、数式がすべて削除され、2倍になってしまいます。数式HTMLタグを認識し、数式文字列を削除して2倍にするのではなく、編集ボックスに必要な$や$$を追加するように、「引用」機能のJavaScriptコードを変更できるのではないでしょうか。
また、Katexのより新しいバージョンをプラグインにバンドルしていただけると嬉しいです。バンドルされているのは2年以上前の0.11ですが、Katexの安定版は0.15.2で、より機能が豊富で多くのバグが修正されています。readmeは承知していますが、気にする人は少ないでしょう。
Mathjax 3.xも(2.7よりもはるかに高速なので)良いでしょう。
編集:Katexをソースからビルドする必要のない、バンドルされているKatexのアップグレードがはるかに簡単な方法があります。tarballを取得し、ファイルをコピーし、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
sam
(Sam Saffron)
4
これはすべて素晴らしいですね。この件についてプルリクエストを送信していただけますか?
「いいね!」 3
nordize
(Nordize)
5
KaTeX の更新と最新リリースへの更新を行う PR を作成しました。MathJax は自分で使用していないため、まだ対応していません。最終的には、これらのライブラリは修正などで頻繁に更新されるため、Discourse はこれらを CDN にリンクできるように(ユーザーがリリースバージョンを指定できるようにし、現在のホストをデフォルトにする)、Discourse の思想に少し反するかもしれませんが、許可することを望むかもしれません。
残念ながら、「引用」機能の修正のための PR を行う時間がありません。最近仕事が多忙なため、誰かが対応してくれることを期待してメッセージを投稿しました。
「いいね!」 4
sam
(Sam Saffron)
6
PRありがとうございます @nordize マージしました!
「いいね!」 5
nordize
(Nordize)
7
このスレッドにはたくさんのメッセージと議論があったと記憶していますが、どうなりましたか?
今年の初めに投稿した最新の貢献にいくつかの注釈を追加し、Katex の数式間でマクロを永続させるための改善(こちらを参照)を行うために来ました。私は間違ったスレッドに来ましたか?
このトピックの投稿は自動的に削除されるタイマーが設定されていますが、もしよろしければ、それらを「ヒント&トリック」スタイルのトピックに移動するために掘り出すことができますか?
nordize
(Nordize)
9
一体なぜ?!? このプラグインは重要で、最も人気のあるものの一つです。このトピックでの議論には、多くの興味深い投稿がありました。私は少なくとも一つのガイドを投稿に書き、参照できるようにそこに残しておいてくれると信じていました。私と私の同僚は、いくつかの投稿をブックマークさえしていました…そして今、それらはすべて消えてしまったのですか?
これは非常に奇妙な決定です。Discourseの目的の一つは、長いトピックを処理できるようにすること(アダプティブローディングなど)ではなかったのでしょうか?「削除する」…確かにスペースは足りているはずです!今日、情報の後世への継承はより重要になっています。1990年代ではないので、このような決定は本当に理解できません。それは基本的に、情報がオンラインで投稿された場所からいつでも消える可能性があるため、個人が情報を保存し、ローカルソースから共有するために身をかがめなければならないということを意味します。これは無駄、手間、不必要な注意と整理を助長し、信頼性と確実性を低下させます。情報が1ヶ月後に消去されると、コミュニティユーザーを支援することも非効率的で問題のあるものになります。これはいくつかの目的を無効にします。私たちは逆の方向に行くはずでした。
これは生死に関わる問題ではないことは明らかです。大げさに言いたいわけではありませんが、それでも…完全に戻して、そしておそらく今後この1ヶ月ポリシーを再考していただけないでしょうか?
とにかく、@sam - 私はこのPRを作成しました: https://github.com/discourse/discourse-math/pull/51 これはデフォルトでMathjaxに同様の機能があるため、MathjaxとKatexを切り替える人々はコンテンツが壊れることになるので、マージを奨励します。古いプラグインからアップグレードする人々にとっても同様です。
「いいね!」 1
もっと丁寧に言えたかもしれませんね。 
うまくいけば(すべて順調であれば
)、役立つ情報や興味深い議論は、OPに移動されたか、新しいトピックに分割されたはずです。常にそうとは限りませんが、確認して確認させていただきます。 
「いいね!」 2
nordize
(Nordize)
11
確かに、コーヒーが足りないのかもしれません…しかし、コミュニティのために時間を投資したものが無駄になるのを発見するのは素晴らしいことです。古いプラグインからのアップグレードのために書いたガイドやスクリプト、そして興味を持っていた他の投稿を保存しておき、人々がメールで助けを求めてくるのを待つべきだったのでしょう。コミュニティフォーラムに投稿することが最も安全でない選択肢になるとは誰が知っていたでしょうか。ええ、コーヒーが足りないのです…
私の知る限り、ここではどちらも起こりませんでした。
トピックを復活させるのはあまりにも…?間違いなくコーヒーが足りない!
「いいね!」 1
これで全部正しいと思いますか?自動タイマーエリアから#supportに移動したので、削除から保護されるはずです。
何か調整や変更が必要ですか?