Ipython: Persamaan nomor di buku catatan.

Dibuat pada 26 Agu 2013  ·  45Komentar  ·  Sumber: ipython/ipython

LaTeX sebaris IPython tidak menyertakan penomoran persamaan. Akan sangat bagus jika urutan LaTeX yang biasanya diberi nomor (yaitu blok \begin{equation} ... \end{equation}) mendapat nomor (opsional?). Sebuah slam dunk akan terjadi jika kita bisa melampirkan referensi ke persamaan dan referensi mereka entah bagaimana nanti dalam teks.

notebook

Komentar yang paling membantu

apakah ini sudah terpecahkan atau haruskah saya memberi ini +1?

Semua 45 komentar

+1
Ini adalah fitur yang agak penting untuk semua jenis dokumen matematika.
Saya percaya bahwa MathJax sudah memiliki kemampuan ini:

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

Sejauh referensi pergi, saya pikir sangat penting untuk mengembangkan sistem referensi silang generik dengan sintaks terpadu, dan bukan yang khusus untuk persamaan LaTeX (dan backend LaTeX).

Saya setuju bahwa harus ada sistem referensi silang generik, tetapi akan menambahkan bahwa itu juga harus dapat berinteraksi dengan kode python. Ini akan memungkinkan lateks dalam penurunan harga ke angka referensi yang dihasilkan dalam kode.

Ini mungkin harus menunggu hingga sistem untuk mengakses variabel python dari sel penurunan harga tersedia, karena mungkin akan menggunakan sistem serupa.

Ini juga tampaknya menyelesaikan masalah dengan lebih lengkap http://stackoverflow.com/questions/18823779/ipython-notebook-and-mathjax-labeled-equations

@ahmadia apa masalahnya mengapa persamaan tidak dapat diberi nomor secara default? Tidak dapat menghitung dan merujuk persamaan adalah sesuatu yang cukup mengganggu saat ini.

+1. Sepertinya menerapkan #5921 akan memungkinkan ini dengan mudah.

+1. Semoga segera diimplementasikan

+1

+1.
Saya menggunakan notebook ipython untuk melengkapi materi kursus untuk kursus elektromagnetik tingkat junior universitas, dan saya melakukannya sebagai kasus uji apakah akan mendorong implementasi notebook ipython secara luas di seluruh kurikulum sarjana kami. Kurangnya penomoran persamaan yang konsisten di buku catatan, atau di dalam bagian buku catatan, adalah batasan serius, bersama dengan kemampuan untuk mereferensikan angka persamaan dalam teks. Saya baik-baik saja dengan penomoran seperti itu yang khusus untuk bagian LaTeX dari sebuah notebook, terutama jika mencoba pendekatan yang lebih umum berarti menunggu lebih lama untuk mendapatkan fungsi ini.

+1.
Sama di sini, saya menulis catatan saya untuk kursus Kalkulus Numerik menggunakan ipython dan penomoran referensi benar-benar hilang.

+1

Ini adalah satu-satunya hal yang menghentikan saya menggunakan Notebook iPython sebagai alat penulisan dokumen utama saya (kecuali kurangnya kolaborasi waktu nyata, tetapi itu tidak terlalu penting). Sebagai gantinya, saya harus membuat draft kasar di sini dan kemudian memindahkannya ke editor LaTeX.

+1 :+1: Kami menggunakan ini untuk memberikan kuliah dan fitur ini mutlak diperlukan!

Oke, saya akhirnya mencoba "solusi" yang dijelaskan dalam posting ini di mana Anda memodifikasi mathjaxutils.js. Selama Anda me-refresh halaman web notebook ipython setelah membuat perubahan pada sel penurunan harga yang berisi lateks, nomor persamaan muncul dan melakukannya dalam urutan yang benar. Menyegarkan halaman juga memperbaiki label, yang menjadi tidak terselesaikan ketika sel di mana mereka didefinisikan dijalankan kembali (yaitu, shift-enter). Namun, ketika buku catatan dirender di nbviewer.ipython.org, nomor persamaan benar-benar hilang, dan label tidak terselesaikan sehingga diganti dengan "???" di mana mereka direferensikan dalam sel teks penurunan harga. Intinya adalah ini bukan solusi untuk sebagian besar kasus penggunaan, meskipun saya senang poster asli mengajukan pertanyaan dan mengetahui sebanyak ini.

Saya ingin menghitung persamaan yang dikembalikan oleh sel kode.
Itulah yang saya gunakan: http://nbviewer.ipython.org/github/MalteJin/Manual-equation-numbering/blob/branch/Manual%20equation%20numbering.ipynb

^ Apakah ini solusi yang direkomendasikan saat ini?

Menabrak. Saya menggunakan notebook Jupyter untuk catatan kursus saya dan ini adalah masalah serius. Apakah sintaks yang nyaman untuk persamaan penomoran manual menjadi kompromi yang layak?

Apakah sintaks yang nyaman untuk persamaan penomoran manual menjadi kompromi yang layak?

Itu ide yang bagus @poulson dan ada sintaks \tag di MathJaX yang mendukung ini.
Tag Persamaan MathJax Manual dalam contoh Notebook Jupyter . Batasan yang sama (mengeksekusi ulang sel Markdown akan menyebabkan MathJaX rusak jika Anda tidak me-refresh browser), tetapi setidaknya Anda tidak perlu mengkonfigurasi ulang notebook untuk melakukannya.

@ahmadia Terima kasih! Mengeksekusi ulang pemecahan sel jelas sedikit membuat frustrasi, tetapi ini adalah kemajuan besar dari \begin{equation} bukan pelabelan!

@ahmadia Apakah referensi persamaan diharapkan tidak diselesaikan di tautan Anda atau di buku catatan langsung (bahkan setelah menyegarkan)?

Coba segarkan lalu jalankan semua sel. Saya rasa tautannya tidak berfungsi di GitHub
karena GH menghapus URL.

Pada hari Sabtu, 3 Oktober 2015, Jack Poulson [email protected] menulis:

@ahmadia https://github.com/ahmadia Apakah diharapkan persamaannya
referensi tidak diselesaikan di tautan Anda atau di buku catatan langsung (bahkan setelah
menyegarkan)?


Balas email ini secara langsung atau lihat di GitHub
https://github.com/ipython/ipython/issues/4113#issuecomment -145305340.

Itu tidak berhasil untuk saya, tetapi karena semuanya sedang di-hardcode, saya tidak melihat alasan untuk bersikeras menggunakan \ref . Oleh karena itu saya hardcoded nomor persamaan untuk referensi dan menghasilkan produk akhir yang dapat dilihat di sini: http://web.stanford.edu/class/math53/notebooks/Week2.html

Terima kasih @poulson untuk mendorong ini. Saya terkena ini berulang kali, dan nomor persamaan hardcoding sangat buruk, tetapi apa yang bisa dilakukan ... IPython harus memiliki dukungan asli untuk ini.

Solusi terbaik sejauh ini, terima kasih kawan!

Jika Anda menyertakan kode:

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

dalam ekstensi javascript, atau bahkan dalam output javascript di notebook, penomoran persamaan otomatis akan diaktifkan. Ini akan memiliki semua masalah yang mencegah kita melakukannya secara default, terutama nomor persamaan mathjax diurutkan berdasarkan waktu render, bukan lokasi di halaman, jadi penomoran hanya akan benar pada pemuatan halaman pertama.

Sebenarnya, Anda dapat mengatur ulang penomoran persamaan dan merender persamaan di buku catatan.

Saya membuat ekstensi notebook sederhana yang melakukan ini:
https://github.com/ipython-contrib/IPython-notebook-extensions/pull/335

@juhasch hebat! Mengingat pengalaman nomor persamaan yang sangat buruk di sebagian besar keadaan, saya pikir default ke off adalah pilihan terbaik. Tetapi menjadikan ini sebagai opsi konfigurasi frontend dengan tindakan untuk memberi nomor ulang akan sangat bagus (tombol bilah alat mungkin adalah ruang yang terlalu berharga untuk dikhususkan untuk itu, tetapi tindakan menu akan baik-baik saja).

Saya membayangkan menggunakan re-render/re-number lebih sering saat membuat buku catatan, jadi saya akan memilih tombol bilah alat atau, jika masuk ke menu, setidaknya tombol pintas mode normal.

@lucasb-eyer Saya pikir itu hal yang baik untuk dilakukan untuk ekstensi seperti yang disediakan @juhasch , tetapi kami mungkin tidak akan melakukannya secara default, karena pintasan keyboard default dan ruang bilah alat sangat berharga. Tetapi dimungkinkan untuk menambahkan salah satu atau keduanya melalui custom.js atau nbextension.

@minrk : Ekstensi dapat dengan mudah diaktifkan/dinonaktifkan dan rendering ulang mengaktifkan/menonaktifkan menggunakan ekstensi server nbextensions:
clipboard01

Jika Anda menekan tombolbutton tombol toolbar, penomoran persamaan diatur ulang/dirender ulang.

@juhasch terima kasih atas pekerjaan Anda! Ini adalah langkah maju yang bagus.

@minrk dalam pengalaman Anda, apa yang akan Anda usulkan sebagai solusi jangka panjang yang tepat untuk penomoran persamaan? Ekstensi @juhasch hanyalah solusi untuk saat ini. Saya tidak meminta Anda untuk menerapkannya, hanya menguraikan apa solusinya. Saya pikir ada banyak orang yang benar-benar terganggu oleh ini, dan jika kita tahu apa jalan yang benar ke depan, kita dapat mencoba mencobanya.

apa yang akan Anda usulkan sebagai solusi tepat jangka panjang untuk penomoran persamaan?

Anda tidak dapat memilikinya. MathJax mengasumsikan bahwa ia memiliki akses ke seluruh halaman saat melakukan penomoran persamaan, dan IPython merender Penurunan harga berdasarkan sel per sel, yang merupakan satu-satunya cara yang waras untuk melakukannya untuk buku catatan besar. Itu akan membutuhkan kerja/implementasi di sisi MathJax, bukan notebook.

Kebanyakan orang (termasuk saya) hanya menginginkan penomoran persamaan. Saya rasa kami tidak terlalu peduli bagaimana penerapannya secara teknis. Jadi saya dapat melihat beberapa kemungkinan cara ke depan, misalnya menambahkan beberapa tambalan ke MathJax yang memungkinkan notebook memberi tahu nomor persamaan tanpa memiliki akses ke seluruh halaman, atau solusi lain adalah dengan hanya menggunakan MathJax untuk membuat persamaan tanpa nomor , lalu render nomor dengan buku catatan itu sendiri. Mungkin ada lebih banyak pilihan. Tetapi saya ingin mendapat restu resmi tentang cara mana yang terbaik, karena saya tidak berpengalaman dalam internal.

apa yang akan Anda usulkan sebagai solusi tepat jangka panjang untuk penomoran persamaan?

Untuk saat ini, pada dasarnya saya akan melakukan apa yang telah dilakukan @juhasch dengan ekstensinya, dengan perubahan berikut jika digabungkan menjadi master:

  1. matikan secara default
  2. simpan toggle di frontend-config, jadi Anda hanya perlu menyalakannya sekali
  3. tambahkan tindakan penomoran ulang, sehingga dapat diikat ke pintasan keyboard
  4. letakkan UI default untuk penomoran ulang di menu alih-alih bilah alat

Pada dasarnya, saya akan membuatnya sedikit lebih buruk daripada ekstensi untuk mereka yang memprioritaskan ini, karena itu tidak masuk akal sebagai default. Namun, setelah tindakan tersedia, menambahkan hal-hal seperti pintasan dan tombol bilah alat menjadi penyesuaian sederhana bagi mereka yang memiliki prioritas berbeda.

Saya tidak tahu seberapa layak penomoran yang selalu benar, karena itu berarti bahwa pada _any_ rendering sel penurunan harga atau keluaran HTML, penomoran perlu diatur ulang, dan _semua_ sel penurunan harga dan keluaran HTML perlu dirender ulang, setiap saat.

Dengan dokumentasi, itu terdengar seperti rencana yang masuk akal bagi saya sebagai pengguna. :+1:

@minrk : sebagai pengguna, saya juga akan menemukan ini solusi yang bisa digunakan. Seberapa beratkah untuk merender ulang semua penurunan harga dan output HTML?

@gregnordin itu akan tergantung pada ukuran notebook, dan tumbuh tak terbatas dengan ukuran notebook. Ini berarti bahwa setiap kali Anda mengedit sel penurunan harga, diperlukan waktu yang sama untuk merender seperti memuat seluruh buku catatan saat Anda pertama kali membukanya. Jelas tidak oke untuk perilaku default, tetapi jika ekstensi ingin mencoba menusuknya, mereka boleh mencobanya.

+1

+1 untuk fitur ini. Saya sedang mempersiapkan kuliah tentang fisika untuk siswa dan penomoran persamaan sangat penting.

Pilihan lain, yang memungkinkan nomor persamaan diperbarui, tanpa merender semuanya, adalah javascript yang mencari keluaran HTML untuk elemen dengan persamaan atau referensi, dan mengganti teksnya dengan nilai yang sesuai.

Untuk mendapatkan yang berfungsi penuh akan memerlukan beberapa modifikasi di MathJax, pengaturan atribut tambahan untuk elemen yang perlu diperbarui, sehingga skrip dapat mengenalinya.

Saat ini dukungan itu tidak ada, tetapi solusi berikut akan membantu

  • gunakan \tag{labelname} untuk membuat nomor persamaan. Perhatikan bahwa di sini tag adalah label
  • referensikan dalam penurunan harga dengan kode html mentah <span class=reference data-target=labelname></span> Ini diperlukan karena keluaran HTML dari \ref atau \eqref tidak menyertakan nama label.

Misalnya

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

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

Skrip berikut memperbarui nomor persamaan. Itu perlu dijalankan setelah nomor persamaan baru atau referensi telah diberikan. Untuk saat ini Anda dapat meletakkan skrip di sel terpisah dan menjalankannya secara manual bila diperlukan. Solusi lengkap membutuhkan beberapa mekanisme untuk memicu tayangan ulang pada waktu yang tepat.

%%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)
    }
);

Perhatikan bahwa skrip hanya memperbarui angka, membiarkan semua tata letak apa adanya. Seharusnya jauh lebih efisien daripada membiarkan MathJax merender semuanya.

@basvandertol Terima kasih untuk sampelnya, tetapi saya tidak melihat bagaimana ini berguna karena hasilnya hanya terlihat di layar saat ini: tidak disimpan, tidak dapat dicetak, tidak dapat dilihat di nbviewer, atau dilihat dalam output apa pun (PDF, HTML, dll.) Saya tidak melihat bahwa ini adalah solusi. Apakah saya salah paham? Atau ini hanya bagian dari solusi?

Terima kasih atas umpan baliknya @dsblank. Ini memang hanya solusi parsial, khususnya untuk masalah memperbarui nomor persamaan saat mengedit notebook tanpa merender ulang semuanya. Saya bereksperimen dengan atribut data HTML untuk mencapai ini. Saya kemudian menemukan bahwa nbconvert menggunakan pendekatan serupa untuk menangani kutipan Lateks. http://nbconvert.readthedocs.io/en/latest/latex_citations.html

Saat ini MathJax tidak menambahkan atribut yang memadai ke output HTML untuk menyelesaikan referensi setelah rendering. Itu sebabnya saya menggunakan label dan referensi hackish ini untuk mendapatkan output HTML yang saya butuhkan. Dengan label ini, konversi normal ke Lateks ->pdf rusak.

Saya sekarang membiasakan diri dengan kode sumber MathJax untuk melihat apakah ada cara mudah untuk menambahkan atribut HTML ke label dan referensi normal.

Langkah selanjutnya adalah menambahkan dukungan di nbconvert untuk mengenali atribut HTML ini, seperti yang sudah dilakukan dengan kutipan. Jika nbconvert juga dapat memindai output dari bagian kode untuk HTML dengan atribut ini, maka teks/label HTML dapat ditambahkan ke gambar yang dihasilkan kode, dan nbconvert
dapat menghasilkan keluaran Lateks yang benar. Angka kemudian dapat direferensikan dalam sel markup.

Ini hanya garis besar pendekatan untuk dukungan penuh untuk referensi di notebook ipython. Tampaknya layak bagi saya, tetapi jika ada yang sudah melihat showhopper sekarang, beri tahu saya. Saya tahu sedikit tentang internal notebook ipython. Ini sepertinya proyek yang menyenangkan untuk dipelajari lebih lanjut, tetapi saat ini saya tidak dapat mengawasi semua implikasinya.

Baru nemu thread (panjang) ini...

Mungkin ini menarik: Saya telah mencoba sesuatu untuk mendukung rendering lingkungan LaTeX, termasuk _penomoran otomatis dan pembaruan_ persamaan dan lingkungan, di seluruh dokumen.
Itu menggunakan tombol untuk menyegarkan tetapi sekarang menggunakan ide yang mirip dengan yang disebutkan oleh @basvandertol di atas.

Tentu saja semua ini menambahkan beberapa kelebihan, tetapi ini sebagian besar dapat diterima bagi saya, bahkan untuk dokumen yang cukup panjang. Ekspor notebook ke dokumen html dan LaTeX tersedia;

Anda dapat melihat ekstensi di sini atau di Pypi . Terbaik.

+1 untuk mengintegrasikan beberapa versi dari solusi yang diusulkan ke dalam master.

apakah ini sudah terpecahkan atau haruskah saya memberi ini +1?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

ghost picture ghost  ·  4Komentar

hexhexd picture hexhexd  ·  4Komentar

okomarov picture okomarov  ·  3Komentar

sataliulan picture sataliulan  ·  4Komentar

quchunguang picture quchunguang  ·  3Komentar