تضمين Discourse-math المطبوخ في عرض الطباعة ورسائل البريد الإلكتروني

المشكلة
يتم عرض Discourse-math بشكل جميل في المتصفح، ولكن في السياقات التي لا يمكن فيها تشغيل JavaScript، تتراجع الرياضيات إلى مصدر LaTeX خام. حالتان لهما تأثير كبير:

  • عرض الطباعة (/print أو متصفح الطباعة إلى PDF): تظهر الرياضيات كـ $...$ بدلاً من رموز معروضة.
  • رسائل البريد الإلكتروني (ملخصات، إشعارات، اشتراكات): يتم تسليم الرياضيات بشكل خام، غير قابلة للقراءة للمستلمين ما لم ينسخوها ويلصقوها في محرر LaTeX.

هذا يكسر سير العمل الهام للمجتمعات التي تعتمد على Discourse للمحتوى التقني.


لماذا هذا مهم

  • غالبًا ما يحتاج معلمو وباحثو العلوم والتكنولوجيا والهندسة والرياضيات إلى طباعة المواضيع أو إعادة توجيه رسائل البريد الإلكتروني. إذا لم تكن الرياضيات واضحة، فإن تلك التصديرات غير قابلة للاستخدام.
  • تم إصلاح فجوات أخرى في الطباعة/رسائل البريد الإلكتروني (المفسدات، الروابط المضمنة، الصور) - الرياضيات هي إغفال صارخ.
  • دعم الرياضيات المطبوخة في سياقات غير JavaScript سيجعل Discourse منصة من الدرجة الأولى للمجتمعات التقنية.

الحل المقترح

  • خطوة خفيفة (الطباعة):
    • تأكد من أن عرض /print يتضمن HTML الرياضيات المطبوخة.
    • تشغيل تنسيق MathJax قبل الطباعة.
  • خطوة أثقل (رسائل البريد الإلكتروني):
    • استكشاف عرض MathJax من جانب الخادم، كما اقترح سام (Sam suggested).
    • عرض الرياضيات إلى SVG أو HTML مطبوخ مسبقًا حتى يرى المستلمون المعادلات المقروءة مباشرة في عملاء البريد الإلكتروني.
  • إعداد موقع اختياري:
    • “استخدام الرياضيات المطبوخة في عرض الطباعة/رسائل البريد الإلكتروني” → يسمح للمسؤولين بالاختيار بين المصدر الخام مقابل الرياضيات المعروضة.

المشاكل ذات الصلة / العمل السابق

  • :white_check_mark: تم إصلاح الرياضيات داخل لوحات [details] (PR #111، يونيو 2025).
  • :memo: كان عرض الطباعة يحتوي بالفعل على إصلاحات للمفسدات/الروابط المضمنة → سابقة لتضمين العناصر المطبوخة.
  • :e_mail: رسائل البريد الإلكتروني: حدد تعليق سام (#214) العرض من جانب الخادم كحل طويل الأجل.

ملخص / TL;DR
في الوقت الحالي، تتراجع الرياضيات في عرض الطباعة ورسائل البريد الإلكتروني إلى LaTeX خام. إضافة عرض الرياضيات المطبوخة سيجعل ملفات PDF والملخصات قابلة للقراءة واحترافية ومتسقة مع ما يراه المستخدمون في المتصفح.

استنساخ على Discourse مع Safari لنظام iOS

حتى عند تمكين طلب موقع سطح المكتب في Safari، لا يزال Discourse يلحق
?mobile_view=1 عند فتح /print، مما يجبر عرض الطباعة المبسط للجوال.

الحل البديل: قم بالتغيير يدويًا إلى ?mobile_view=0 للحصول على تخطيط طباعة سطح المكتب الكامل.

مثال
/t/fw-the-email-subject/12345/print?mobile_view=0

3 إعجابات

نعم، أعتقد أن ملخص سام دقيق: إذا أردنا أن تعرض رسائل البريد الإلكتروني / عرض الطباعة الرياضيات معروضة، فنحن بحاجة إلى عرض الرياضيات من جانب الخادم (أو على الأقل “العرض المسبق” من جانب الخادم)، لأن عملاء البريد الإلكتروني لن يقوموا بتشغيل MathJax.

النهج الواقعي سيكون:

  • أثناء الطهي (أو في مهمة خلفية بعد الطهي)، ابحث عن نطاقات الرياضيات (المضمنة + المعروضة).
  • اعرض كل تعبير إلى SVG (أو MathML كحل بديل) باستخدام MathJax في بيئة Node.
  • استبدل الرياضيات في HTML المطبوخ المستخدم للبريد الإلكتروني/الطباعة بأحد ما يلي:
    • \u003csvg ...\u003e مضمن (أفضل دقة، لا يوجد استدعاء خارجي)، أو
    • \u003cimg src=\"data:image/svg+xml;base64,...\"\u003e (أكثر توافقًا لبعض العملاء، ولكنه قد يصبح كبيرًا).
  • التخزين المؤقت بواسطة مفتاح ثابت (على سبيل المثال sha256(latex + display_mode + macros + font_config)), لذلك نقوم بالعرض مرة واحدة فقط لكل صيغة فريدة.

الأجزاء الصعبة (ولكن يمكن إدارتها إذا تم تحديد نطاقها بعناية):

  • محاكاة DOM: مخرجات “المتصفح” الخاصة بـ MathJax تريد DOM؛ لذلك سنحتاج على الأرجح إلى mathjax-full + jsdom (أو استخدام مسار المحول النقي).
  • الأداء / المهلات: قم بذلك بشكل غير متزامن في قائمة انتظار المهام، وتدهور بشكل جيد (اترك LaTeX كما هو إذا فشل العرض).
  • مفارقات عملاء البريد الإلكتروني: بعض العملاء يزيلون SVG؛ لذا فإن وجود خطة بديلة أمر مهم (على سبيل المثال، نص عادي/LaTeX، أو MathML حيث يتم دعمه).

إذا أراد شخص ما إجراء اختبار سريع، فإن أول تجربة سأقوم بها هي:

  1. برنامج نصي صغير لـ Node يستخدم mathjax-full لعرض $begin:math:text$E\\=mc\\^2$end:math:text$ إلى SVG،
  2. معرفة الافتراضات التي يقدمها (DOM مقابل المحول)،
  3. ثم تحديد ما إذا كان MiniRacer طريقًا مسدودًا ويجب أن نتعامل مع هذا على أنه “يحتاج إلى توفر Node” (أو خدمة صغيرة).

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