Ipython: أرقام المعادلة في دفتر الملاحظات.

تم إنشاؤها على ٢٦ أغسطس ٢٠١٣  ·  45تعليقات  ·  مصدر: ipython/ipython

لا يشتمل LaTeX المضمن في IPython على ترقيم المعادلات. سيكون رائعًا إذا حصلت تسلسلات LaTeX التي يتم ترقيمها عادةً (على سبيل المثال \ start {equation} ... \ end {equation} block) على أرقام (اختيارية؟). سيكون ضربة سلام إذا تمكنا من إرفاق مراجع إلى المعادلات والرجوع إليها بطريقة ما لاحقًا في النص.

notebook

التعليق الأكثر فائدة

هل تم حل هذا بالفعل أم يجب إجراء 1+ لهذا؟

ال 45 كومينتر

+1
هذه ميزة مهمة إلى حد ما لأي نوع من المستندات الرياضية.
أعتقد أن MathJax لديه بالفعل هذه الإمكانية:

http://docs.mathjax.org/en/latest/tex.html#automatic -equation-numbering

بقدر ما تذهب المراجع ، أعتقد أنه من الأهمية بمكان تطوير نظام إسناد ترافقي عام مع بناء جملة موحد ، وليس نظامًا خاصًا بمعادلات LaTeX (و LaTeX الخلفية).

أوافق على أنه يجب أن يكون هناك نظام إحالة مرجعية عام ، لكنني سأضيف أنه يجب أن يكون قادرًا أيضًا على التفاعل مع كود Python. سيسمح هذا لاتكس في تخفيض السعر إلى الأرقام المرجعية المنتجة في الكود.

ربما يتعين على هذا الانتظار حتى يتوفر نظام للوصول إلى متغيرات بيثون من خلايا markdown ، حيث من المحتمل أن يستخدم نظامًا مشابهًا.

راجع https://github.com/ipython/ipython/pull/2517#issuecomment -9884544 ويرجى التعليق.

يبدو أن هذا أيضًا يحل المشكلة بشكل كامل http://stackoverflow.com/questions/18823779/ipython-notebook-and-mathjax-labeled-equations

ahmadia ما هي المشكلة لماذا لا يمكن ترقيم المعادلات بشكل افتراضي؟ عدم القدرة على ترقيم المعادلات والإشارة إليها أمر مزعج للغاية حاليًا.

+1. يبدو أن تنفيذ # 5921 سيسمح بذلك بسهولة.

+1. آمل أن يتم تنفيذ هذا في وقت قريب جدًا

+1

+1.
أنا أستخدم دفاتر ipython لتكملة المواد الدراسية لدورة الكهرومغناطيسية بالجامعة على مستوى المبتدئين ، وأنا أفعل ذلك كحالة اختبار لمعرفة ما إذا كان يجب الدفع من أجل تطبيق دفتر ipython الواسع في جميع أنحاء مناهجنا الجامعية. يعد عدم وجود ترقيم معادلات متسق في دفتر ملاحظات ، أو داخل أقسام من دفتر ملاحظات ، قيدًا خطيرًا ، إلى جانب القدرة على الإشارة إلى أرقام المعادلات في النص. أنا بخير مع كون هذا الترقيم خاصًا بأجزاء LaTeX من الكمبيوتر المحمول ، خاصةً إذا كانت تجربة نهج أكثر عمومية تعني انتظارًا أطول للحصول على هذه الوظيفة.

+1.
نفس الشيء هنا ، أنا أكتب ملاحظاتي لدورة التفاضل والتكامل العددي باستخدام ipython والترقيم المرجعي مفقود حقًا.

+1

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

+1: +1: نحن نستخدم هذا لإلقاء محاضرات وهذه الميزة ضرورية للغاية!

حسنًا ، لقد جربت أخيرًا "الحل" الموضح في هذا المنشور حيث تقوم بتعديل mathjaxutils.js. طالما قمت بتحديث صفحة ويب دفتر ipython بعد إجراء تغييرات على خلايا markdown التي تحتوي على مادة اللاتكس ، تظهر أرقام المعادلة ويتم ذلك بالترتيب الصحيح. يؤدي تحديث الصفحة أيضًا إلى إصلاح التسميات ، والتي تصبح بدون حل عند إعادة تشغيل الخلية التي تم تعريفها فيها (أي إدخال shift). ومع ذلك ، عندما يتم تقديم دفتر الملاحظات في nbviewer.ipython.org ، فإن أرقام المعادلات مفقودة تمامًا ، ولم يتم حل التسميات ، لذا يتم استبدالها بـ "؟؟؟" حيث يتم الرجوع إليها في خلايا نص علامة التخفيضات. خلاصة القول هي أن هذا ليس حلًا كبيرًا لمعظم حالات الاستخدام ، على الرغم من أنني سعيد لأن الملصق الأصلي طرح السؤال واكتشف هذا كثيرًا.

أردت ترقيم المعادلات التي تم إرجاعها بواسطة خلايا التعليمات البرمجية.
هذا ما استخدمته: http://nbviewer.ipython.org/github/MalteJin/Manual-equation-numbering/blob/branch/Manual٪20equation٪20numbering.ipynb

^ هل هذا هو الحل الموصى به حاليًا؟

صدم. أنا أستخدم دفاتر Jupyter لملاحظات الدورة التدريبية الخاصة بي وهذه مشكلة خطيرة. هل ستكون البنية الملائمة لترقيم المعادلات يدويًا بمثابة حل وسط لائق؟

هل ستكون البنية الملائمة لترقيم المعادلات يدويًا بمثابة حل وسط لائق؟

هذه فكرة جيدة poulson وهناك صيغة \tag في MathJaX تدعم ذلك.
علامات معادلة MathJax اليدوية في مثال Jupyter Notebook . نفس القيود (إعادة تنفيذ خلية Markdown ستؤدي إلى تعطل MathJaX إذا لم تقم بتحديث المتصفح) ، ولكن على الأقل لا يتعين عليك إعادة تكوين دفتر الملاحظات للقيام بذلك.

ahmadia شكرا! من المؤكد أن إعادة تنفيذ كسر الخلية أمر محبط بعض الشيء ، ولكن هذا تقدم هائل من \begin{equation} دون وضع العلامات!

ahmadia هل من المتوقع ألا يتم حل مراجع المعادلة في الرابط الخاص بك أو في دفتر الملاحظات المباشر (حتى بعد التحديث)؟

حاول التحديث ثم نفذ جميع الخلايا. لا أعتقد أن الروابط تعمل في GitHub
لأن GH يقطع عناوين URL.

في يوم السبت 3 أكتوبر 2015 ، كتب Jack Poulson [email protected] :

ahmadia https://github.com/ahmadia هل يتوقع ان تكون المعادلة
لم يتم حل المراجع في الارتباط الخاص بك أو في دفتر الملاحظات المباشر (حتى بعد
منعش)؟

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/ipython/ipython/issues/4113#issuecomment -145305340.

لم ينجح ذلك بالنسبة لي ، ولكن نظرًا لأن كل شيء يتم ترميزه بشكل ثابت ، لا أرى أي سبب للإصرار على استخدام \ref . لذلك قمت بترميز أرقام المعادلة للمراجع بشكل ثابت وأنتجت المنتج النهائي الذي يمكن رؤيته هنا: http://web.stanford.edu/class/math53/notebooks/Week2.html

شكرا @ بولسون لدفع هذا. لقد أصبت بهذا مرارًا وتكرارًا ، وأرقام معادلات الترميز الثابت سيئة جدًا ، ولكن ما الذي يمكن للمرء فعله ... يجب أن يتمتع IPython بدعم محلي لهذا.

أفضل عمل حول حتى الآن ، شكرا يا شباب!

إذا قمت بتضمين الرمز:

MathJax.Hub.Config({
  TeX: { equationNumbers: { autoNumber: "AMS" } }
});

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

في الواقع ، يمكنك إعادة تعيين ترقيم المعادلات وإعادة عرض المعادلات في دفتر الملاحظات.

لقد صنعت ملحقًا بسيطًا للكمبيوتر الدفتري يقوم بذلك:
https://github.com/ipython-contrib/IPython-notebook-extensions/pull/335

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

أتخيل استخدام إعادة التقديم / إعادة الترقيم في كثير من الأحيان عند إنشاء دفاتر ، لذلك سأصوت لزر شريط الأدوات أو ، إذا انتقل إلى القائمة ، على الأقل مفتاح التشغيل السريع للوضع العادي.

@ lucasb-eyer أعتقد أن هذا أمر جيد بالنسبة لملحق مثل juhasch الذي قدمه ، ولكن ربما لن نقوم بذلك افتراضيًا ، نظرًا لأن كل من اختصارات لوحة المفاتيح الافتراضية ومساحة شريط الأدوات ثمينة للغاية. ولكن يمكن إضافة أحدهما أو كليهما عبر custom.js أو nbextension.

minrk : يمكن تنشيط / إلغاء تنشيط الامتدادات بسهولة وإعادة تشغيل / إيقاف تشغيل إعادة العرض باستخدام ملحق خادم nbextensions:
clipboard01

إذا قمت بالضغط على ملفbutton زر شريط الأدوات ، تتم إعادة تعيين ترقيم المعادلات / إعادة تصييرها.

juhasch شكرا لعملك! هذه خطوة عظيمة للامام.

minrk في تجربتك ، ما الذي تقترحه كحل مناسب طويل الأجل لترقيم المعادلة؟ يعد ملحق juhasch مجرد حل بديل في الوقت الحالي. أنا لا أطلب منك تنفيذه ، فقط حدد الحل الذي يجب أن يكون. أعتقد أن هناك الكثير من الناس منزعج حقًا من هذا ، وإذا عرفنا ما هو الطريق الصحيح للمضي قدمًا ، فيمكننا محاولة منحه فرصة.

ما الذي تقترحه على أنه الحل المناسب طويل المدى لمعادلة الترقيم؟

لا يمكنك الحصول عليه. يفترض MathJax أنه يمكنه الوصول إلى الصفحة بأكملها عند إجراء ترقيم المعادلات ، ويقوم IPython بعرض Markdown على أساس خلية تلو الأخرى ، وهي الطريقة المعقولة الوحيدة للقيام بذلك مع أجهزة الكمبيوتر المحمولة الكبيرة. سيتطلب العمل / التنفيذ على جانب MathJax للأشياء ، وليس دفتر الملاحظات.

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

ما الذي تقترحه على أنه الحل المناسب طويل المدى لمعادلة الترقيم؟

في الوقت الحالي ، سأفعل ما فعله juhasch بامتداده ، مع التغييرات التالية إذا تم دمجها في رئيسي:

  1. جعله قبالة افتراضيا
  2. store toggle في frontend-config ، لذلك ما عليك سوى تشغيله مرة واحدة
  3. إضافة إجراء إعادة الترقيم ، بحيث يمكن ربطه باختصار لوحة المفاتيح
  4. ضع واجهة المستخدم الافتراضية لإعادة الترقيم في القائمة بدلاً من شريط الأدوات

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

لا أعرف مدى جدوى الترقيم الصحيح دائمًا ، لأنه قد يعني أنه عند عرض أي خلية علامة أو إخراج HTML ، يجب إعادة تعيين الترقيم ، وستحتاج جميع خلايا العلامات ومخرجات HTML إلى إعادة تصييرها ، في كل مرة.

بالنظر إلى الوثائق ، يبدو ذلك بمثابة خطة معقولة بالنسبة لي كمستخدم. : +1:

minrk : كمستخدم ، سأجد هذا أيضًا حلاً صالحًا. ما مدى صعوبة إعادة عرض جميع مخرجات Markdown و HTML؟

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

+1

+1 لهذه الميزة. أقوم بإعداد محاضرات عن الفيزياء للطلاب ويعتبر ترقيم المعادلات أمرًا ضروريًا.

هناك خيار آخر ، يسمح بتحديث أرقام المعادلات ، دون إعادة عرض كل شيء ، وهو جافا سكريبت الذي يبحث في مخرجات HTML عن العناصر ذات المعادلات أو المراجع ، ويستبدل نصها بالقيمة المناسبة.

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

في الوقت الحالي ، لا يتوفر هذا الدعم ، ولكن الحلول التالية ستفي بالغرض

  • استخدم \tag{labelname} لإنشاء رقم المعادلة. لاحظ أن العلامة هنا هي التسمية
  • قم بالإشارة إليه في علامة التخفيض باستخدام كود html الخام <span class=reference data-target=labelname></span> وهذا ضروري لأن إخراج HTML لـ \ ref أو \ eqref لا يتضمن اسم التسمية.

فمثلا

$$
\begin{equation}
  A = 1 \tag{eq:sample}
\end{equation}
$$

The amazing result in <span class=reference data-target="eq:sample"></span> can ...blah..blah

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

%%javascript

// find all equation numbers (tags) that have no data-label attribute and set
// it to the tag text
$("span.mtd[id|='mjx-eqn']").not("[data-label]").each(
    function (index)
    {
        $(this).attr("data-label", $(this).text().slice(1,-1));
    }
);

// loop over all equation numbers and set the text 
$("span.mtd[id|='mjx-eqn']").each(
    function (index)
    {
        $(this).text("(" + (index+1) + ")");
    }
);

// loop over all references and resolve them by finding the
// equation number with a matching data-label attribute
$("span.reference").each(
    function (index)
    {
        var target = $(this).attr("data-target");
        var eqn = $("span.mtd[id|='mjx-eqn'][data-label='" + target + "']").text()
        $(this).text(eqn)
    }
);

لاحظ أن البرنامج النصي يقوم بتحديث الأرقام فقط ، مع ترك كل التخطيط كما هو. يجب أن يكون أكثر فاعلية بكثير من السماح لـ MathJax بإعادة عرض كل شيء.

basvandertol شكرًا على العينة ، لكنني لا أرى مدى فائدة ذلك لأن النتائج تظهر فقط على الشاشة الحالية: لم يتم حفظها ، ولا يمكن طباعتها ، ولا يمكن عرضها في nbviewer ، ولا يمكن رؤيتها في أي إخراج (PDF ، HTML ، إلخ.) لا أرى أن هذا حل بديل. هل أسأت فهمك؟ أم أن هذا مجرد جزء من حل؟

شكرا لملاحظاتكdsblank. إنه في الواقع حل جزئي فقط ، خاصة لمشكلة تحديث أرقام المعادلة أثناء تحرير دفتر الملاحظات دون إعادة عرض كل شيء. كنت أجرب سمات بيانات HTML لتحقيق ذلك. اكتشفت لاحقًا أن nbconvert يستخدم أسلوبًا مشابهًا للتعامل مع استشهادات Latex. http://nbconvert.readthedocs.io/en/latest/latex_citations.html

في الوقت الحالي ، لا يضيف MathJax سمات كافية إلى إخراج HTML لحل المراجع بعد التقديم. لهذا السبب أستخدم هذه التسميات والمراجع المخترقة للحصول على إخراج HTML الذي أحتاجه. باستخدام هذه الملصقات ، يتم كسر التحويل العادي إلى Latex -> pdf.

أنا الآن أتعرف على الكود المصدري MathJax لمعرفة ما إذا كانت هناك طريقة سهلة لإضافة سمات HTML إلى التسميات والمراجع العادية.

ستكون الخطوة التالية هي إضافة دعم في nbconvert للتعرف على سمات HTML هذه ، تمامًا كما تفعل بالفعل مع الاستشهادات. إذا كان بإمكان nbconvert أيضًا مسح إخراج أقسام التعليمات البرمجية لـ HTML بهذه السمات ، فيمكن إضافة تسمية توضيحية / تسمية HTML إلى الأرقام التي تم إنشاؤها بواسطة التعليمات البرمجية ، و nbconvert
يمكن أن تولد إخراج اللاتكس الصحيح. يمكن بعد ذلك الرجوع إلى الأشكال في خلايا الترميز.

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

وجدت للتو هذا الموضوع (الطويل) ...

قد يكون هذا مفيدًا: لقد حاولت شيئًا ما لدعم عرض بيئات LaTeX ، بما في ذلك الترقيم التلقائي والتحديث لكل من المعادلات والبيئات ، على مستوى المستند.
استخدم زرًا للتحديث ولكنه يستخدم الآن فكرة مشابهة لتلك المذكورة في basvandertol أعلاه.

بالطبع كل هذا يضيف بعض الحمل الزائد ، لكن هذا مقبول إلى حد كبير بالنسبة لي ، حتى بالنسبة للمستندات الطويلة جدًا. يتوفر تصدير دفتر الملاحظات إلى مستندات html و LaTeX ؛

يمكنك إلقاء نظرة على الامتداد هنا أو على Pypi . الأفضل.

+1 لدمج بعض إصدارات الحلول المقترحة في النموذج الرئيسي.

هل تم حل هذا بالفعل أم يجب إجراء 1+ لهذا؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

jwkvam picture jwkvam  ·  4تعليقات

quchunguang picture quchunguang  ·  3تعليقات

sataliulan picture sataliulan  ·  4تعليقات

RinaldoB picture RinaldoB  ·  3تعليقات

ederag picture ederag  ·  3تعليقات