ترقية إلى إضافة الرياضيات الجديدة

لا يزال لدي المكون الإضافي القديم “Discourse Mathjax” مثبتًا. هل نجح أي شخص في تحويل مشاركاته لعرضها بشكل صحيح باستخدام المكون الإضافي الجديد؟ هل يمكنك التكرم بنشر أمر سطر أوامر يعمل؟

المكونان الإضافيان ليسا متوافقين بنسبة 100٪، حيث سيتم كسر بعض المحتوى إذا قمت فقط بتنشيط المكون الإضافي الجديد.

على سبيل المثال، يتطلب المكون الإضافي الجديد $$ مزدوجة قبل وبعد كتل \\begin{...}...\\end{...}، على سبيل المثال \\begin{align}...\\end{align} (بدون $$ مزدوجة) يتم عرضه كرياضيات باستخدام المكون الإضافي القديم ولكن ليس مع المكون الإضافي الجديد.

لتحويل هذه، سأقوم بكشط كل المحتوى وإجراء بحث واستبدال باستخدام تعبير عادي لإضافة/إلحاق $$ مزدوجة قبل/بعد \\begin{..}/\\end{..} (ولكن هذه الكتل المتداخلة ستكون مشكلة). قد تكون هناك حالات أخرى يظهر فيها المحتوى مكسورًا لم أكتشفها بعد (إنه منتدى عمره 5 سنوات به الكثير من الرياضيات).

إعجاب واحد (1)

حسنًا، لقد أنفقت أكثر مما أقر به لتحويل وإصلاح المحتوى المكسور بعد الترقية إلى المكون الإضافي الجديد للرياضيات، لذلك أنشر هنا الأوامر الهامة التي استخدمتها (اعذروا الترقيع القبيح، لقد أصبحت كسولًا جدًا). لا يزال بعض الإصلاح اليدوي للمحتوى ضروريًا، ولكنه ليس كثيرًا في حالتنا.

ملاحظة: هذا لأغراض الإلهام. تذكر قصيدة “لا أتحمل أي مسؤولية…”. لا تقم بتشغيل هذا بشكل أعمى إذا كنت لا تفهمه.

# استبدال \\\\ بـ \\ (والذي يترجم أيضًا \\\\\\\\ إلى \\\\)
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 "";

## تطبيق الأمرين أعلاه على بيئات أخرى قد تكون لديك بخلاف {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(/(\>\s*)\$\$(.*?)\$\$\s*?\n/m,"\\1>\$$\\2>\$$\n>"); 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+ أسطر متتالية قبل وبعد `$$`
# بسطر واحد
# تحذير: يعمل بشكل جيد في الإصدار الحالي من المكون الإضافي، ولكنه قد يعرض
# بشكل مختلف في إصدار مستقبلي (؟). على سبيل المثال، في لاتكس الفعلي، سطر فارغ
# بعد $$ قبل النص يحدث فرقًا في التباعد الرأسي.
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)

@sam بما أن هذه الإضافة أصبحت رسمية الآن، هل يمكننا من فضلك جعل ميزة “الاقتباس” تعمل بشكل صحيح أيضًا؟ عند تحديد نص يحتوي على معادلات رياضية ثم استخدام زر “الاقتباس”، أحصل حاليًا على كل المعادلات الرياضية محذوفة ومكررة. يمكن لرمز جافاسكريبت الخاص بميزة “الاقتباس” التعرف على علامات HTML الرياضية وإضافة علامات $ و/أو $$ اللازمة في مربع التحرير، بدلاً من حذفها وتكرار سلسلة المعادلات الرياضية.

أيضًا، أعتقد أنه سيكون من الجيد تضمين إصدار أحدث من Katex في الإضافة. الإصدار المضمن قديم جدًا (أكثر من عامين) 0.11 بينما Katex المستقر هو 0.15.2 وهو أغنى وبه الكثير من الأخطاء التي تم إصلاحها. أنا على علم بـ ملف القراءة ولكن قليل من الناس سيهتمون بذلك.

Mathjax 3.x سيكون لطيفًا أيضًا (أسرع بكثير من 2.7)

تعديل: هناك ترقية أسهل بكثير لـ Katex المضمن لا تتطلب بناء Katex من المصادر. فقط قم بتنزيل الملف المضغوط، وانسخ الملفات، واستبدل مجلد الخطوط في ملف 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 إعجابات

كل هذا يبدو رائعًا، هل هناك أي فرصة لتقديم بعض طلبات السحب (PRs) لهذا؟

3 إعجابات

تم إنشاء PR لتحديث KaTeX وتحديثه أيضًا إلى أحدث إصدار. لا أستخدم MathJax بنفسي لذلك لم أهتم به بعد. في النهاية، قد ترغب Discourse في السماح بالربط بشبكة توصيل المحتوى (CDN) لهذه (السماح للمستخدم بتحديد عنوان URL حتى يتمكن من إصلاح إصدار معين إذا رغب في ذلك؛ الافتراضي هو المضيف الحالي) حتى لو كان ذلك يتعارض قليلاً مع مبادئ Discourse، حيث يتم تحديث هذه المكتبات بشكل متكرر جدًا مع الإصلاحات وما إلى ذلك.

للأسف، لا يوجد وقت لـ PR لإصلاح ميزة “الاقتباس” - أنا غارق جدًا في العمل هذه الأيام، ولهذا السبب تركت رسالة على أمل أن يتمكن شخص آخر من معالجتها.

4 إعجابات

شكراً جزيلاً على طلب السحب (PR) @nordize تم دمجه!

5 إعجابات

أتذكر أن هذا الموضوع كان يحتوي على الكثير من الرسائل والنقاشات - ماذا حدث؟

لقد جئت لإضافة بعض الملاحظات إلى مساهمتي الأخيرة التي قدمتها في وقت سابق من هذا العام، بالإضافة إلى تحسين للسماح للوحدات الماكرو بالاستمرار بين التعبيرات الرياضية مع Katex (انظر هنا). هل أنا في الموضوع الخاطئ؟

المشاركات في هذا الموضوع مضبوطة على مؤقت تلقائي لمسحها، ولكن يمكنني استخراج أي منها إذا كنت ترغب في نقلها إلى موضوع بأسلوب النصائح والحيل؟

لماذا بحق السماء؟! هذه الإضافة مهمة وهي واحدة من الأكثر شعبية. النقاش في هذا الموضوع كان يحتوي على العديد من المشاركات ذات الأهمية. لقد كتبت دليلًا واحدًا على الأقل في مشاركة ووثقت أنها ستكون هناك للإشارة إليها. أنا وزملائي قمنا بوضع إشارة مرجعية لبعض المشاركات أيضًا … والآن كل شيء اختفى؟

هذا قرار غريب جدًا. ألم يكن أحد أغراض Discourse هو القدرة على التعامل مع المواضيع الطويلة (التحميل التكيفي وما إلى ذلك)؟ “مسحها” … بالتأكيد نحن لا نعاني من نقص في المساحة! في هذا العصر، بقاء المعلومات للأجيال القادمة أكثر أهمية. أنا لا أفهم حقًا مثل هذه القرارات لأننا لسنا في عام 1990، وهي تقول أساسًا أن العبء لا يزال على الفرد لحفظ المعلومات والجهد لمشاركتها من مصادر محلية، لأنها قد تختفي في أي وقت من المكان الذي تم نشره فيه عبر الإنترنت، مما يشجع على الهدر، والمتاعب، والانتباه والتنظيم غير الضروريين، ويقلل من الثقة والموثوقية. يصبح مساعدة مستخدمي المجتمع غير فعال وإشكاليًا أيضًا إذا تم مسح المعلومات بعد شهر واحد. هذا يقوض عددًا قليلاً من الأغراض. كان من المفترض أن نذهب في الاتجاه المعاكس.

إنها ليست مسألة حياة أو موت، بالطبع، لا أريد تضخيم الأمور، ولكن مع ذلك … هل يمكنك إعادتها بالكامل وربما إعادة النظر في سياسة الشهر هذه للمضي قدمًا؟

على أي حال، @sam - لقد قمت بإنشاء طلب السحب هذا: https://github.com/discourse/discourse-math/pull/51 والذي أشجع على دمجه لأن Mathjax لديه ذلك افتراضيًا، لذلك سيواجه الأشخاص الذين ينتقلون بين Mathjax و Katex محتوى معطلًا. وينطبق الشيء نفسه على الأشخاص الذين يقومون بالترقية من الإضافة القديمة.

إعجاب واحد (1)

ربما كان بإمكاني قول ذلك بلطف أكبر. :slightly_smiling_face:

نأمل (إذا سارت الأمور على ما يرام :crossed_fingers:) أن تكون أي معلومات مفيدة/مناقشات مثيرة للاهتمام قد تم نقلها إلى الموضوع الأصلي أو تم فصلها إلى موضوع جديد. هناك احتمال أن هذا لا يحدث دائمًا، ولكني سعيد بالاطلاع والتحقق. :+1:

إعجابَين (2)

بالتأكيد، ربما لم يكن هناك ما يكفي من القهوة… ولكن من الرائع اكتشاف أن الأشياء التي تستثمر فيها الوقت (من أجل المجتمع) قد تم التخلص منها. أعتقد أنه كان يجب عليّ الاحتفاظ بالدليل والنصوص البرمجية التي كتبتها للترقية من المكون الإضافي القديم، بالإضافة إلى المشاركات الأخرى التي كنت مهتمًا بها، ثم آمل أن يطلب مني الناس المساعدة عبر البريد الإلكتروني. من كان يعلم أن نشرها على منتدى المجتمع سيكون الخيار الأكثر خطورة. نعم، لم يكن هناك ما يكفي من القهوة…

لم يحدث أي من ذلك هنا على حد علمي.

إعادة الموضوع ستكون كثيرة جدًا… بالتأكيد ليس هناك ما يكفي من القهوة! :slight_smile:

إعجاب واحد (1)

أعتقد أن لدي كل العناصر الصحيحة؟ لقد نقلتها من منطقة المؤقت التلقائي إلى #support، لذا يجب أن تكون آمنة من أي حذف. :+1: هل هناك أي تعديلات أو تغييرات تريد مني إجراؤها؟