Mathjax: persamaan \label dan \ref

Dibuat pada 11 Feb 2011  ·  33Komentar  ·  Sumber: mathjax/MathJax

Permintaan fitur! Bisakah kita memiliki fasilitas \label dan \ref untuk persamaan?

Ini mungkin memang populer, tetapi saya tidak dapat menemukannya di daftar masalah (atau menyebutkannya dalam dokumentasi). Dan pada dasarnya telah dibahas lama: http://sourceforge.net/projects/mathjax/forums/forum/948700/topic/3817124

Terima kasih!

Fixed Test Available v2.0

Komentar yang paling membantu

Saya telah memposting implementasi penomoran persamaan otomatis, bersama dengan makro \label dan \ref, di cabang issue71 dari garpu MathJax saya. Ini memerlukan beberapa perubahan penting pada rutinitas inti MathJax, jadi Anda harus berhati-hati saat menggunakan ini, karena perubahan itu sangat baru, dan belum mengalami guncangan seperti yang dimiliki inti lainnya. Saya yakin mereka baik-baik saja, tetapi mungkin ada seluk-beluk yang kami temukan saat mereka melihat lebih banyak digunakan.

Ada parameter konfigurasi baru (lihat file config/defaults.js) yang mengontrol penomoran persamaan. Secara khusus, parameter konfigurasi TeX.equationNumbers.autoNumber mengontrol bagaimana MathJax menangani penomoran otomatis. Secara default, tidak ada penomoran otomatis yang dilakukan (jadi defaultnya sama dengan perilaku MathJax saat ini). Tapi Anda bisa mengatur

MathJax.Hub.Config({
  TeX: { 
     equationNumbers: {  autoNumber: "AMS"  },
     extensions: ["AMSmath.js"]
  }
});

untuk mendapatkan penomoran untuk lingkungan AMS (persamaan, menyelaraskan, mengumpulkan, multline, dll.), dengan lingkungan berbintang menekan angka. Anda dapat menggunakan \tag untuk memberikan nomor persamaan Anda sendiri, dan \label dan \ref untuk mengakses nomor persamaan dalam teks halaman. (Perintah \ref sekarang dikenali baik di dalam maupun di luar mode matematika.)

Jika Anda menyetel autoNumber ke "all" maka setiap persamaan yang ditampilkan akan diberi nomor secara otomatis.

Masalah yang perlu diingat: nomor persamaan ditangani menggunakan elemen mlabeledtr MathML, yang tidak diterapkan oleh Firefox (baik versi 3 maupun 4), jadi jika Anda menggunakan penyaji NativeMML, nomor persamaan tidak akan ditampilkan. Perhatikan bahwa file konfigurasi gabungan yang menyertakan "HTMLorMML" akan memilih keluaran NativeMML di Firefox, misalnya. Ini dapat ditimpa dengan menentukan

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  MMLorHTML: { prefer: { Firefox: "HTML" } }
});
</script>

sebelum memuat MathJax.js untuk memaksa Firefox menggunakan penyaji keluaran HTML-CSS daripada penyaji NativeMML (sambil tetap mengizinkan IE/MathPlayer untuk menggunakan MathML).

Saya masih bekerja di cabang ini, jadi perubahan saya masih dilakukan. Saya tidak senang dengan metode yang digunakan untuk menangani referensi penerusan, dan mungkin mengubah cara kerjanya (meskipun itu akan bersifat internal, dan tidak akan mengubah tampilannya bagi penulis atau pengguna).

Davide

Semua 33 komentar

Itu ada dalam daftar hal-hal untuk ditambahkan, tetapi kami telah berkonsentrasi pada kinerja dan perbaikan bug untuk rilis 1.1. Saya tidak melupakannya, dan ini adalah salah satu hal yang harus ditambahkan setelah versi 1.1.

Davide

Saya telah memposting implementasi penomoran persamaan otomatis, bersama dengan makro \label dan \ref, di cabang issue71 dari garpu MathJax saya. Ini memerlukan beberapa perubahan penting pada rutinitas inti MathJax, jadi Anda harus berhati-hati saat menggunakan ini, karena perubahan itu sangat baru, dan belum mengalami guncangan seperti yang dimiliki inti lainnya. Saya yakin mereka baik-baik saja, tetapi mungkin ada seluk-beluk yang kami temukan saat mereka melihat lebih banyak digunakan.

Ada parameter konfigurasi baru (lihat file config/defaults.js) yang mengontrol penomoran persamaan. Secara khusus, parameter konfigurasi TeX.equationNumbers.autoNumber mengontrol bagaimana MathJax menangani penomoran otomatis. Secara default, tidak ada penomoran otomatis yang dilakukan (jadi defaultnya sama dengan perilaku MathJax saat ini). Tapi Anda bisa mengatur

MathJax.Hub.Config({
  TeX: { 
     equationNumbers: {  autoNumber: "AMS"  },
     extensions: ["AMSmath.js"]
  }
});

untuk mendapatkan penomoran untuk lingkungan AMS (persamaan, menyelaraskan, mengumpulkan, multline, dll.), dengan lingkungan berbintang menekan angka. Anda dapat menggunakan \tag untuk memberikan nomor persamaan Anda sendiri, dan \label dan \ref untuk mengakses nomor persamaan dalam teks halaman. (Perintah \ref sekarang dikenali baik di dalam maupun di luar mode matematika.)

Jika Anda menyetel autoNumber ke "all" maka setiap persamaan yang ditampilkan akan diberi nomor secara otomatis.

Masalah yang perlu diingat: nomor persamaan ditangani menggunakan elemen mlabeledtr MathML, yang tidak diterapkan oleh Firefox (baik versi 3 maupun 4), jadi jika Anda menggunakan penyaji NativeMML, nomor persamaan tidak akan ditampilkan. Perhatikan bahwa file konfigurasi gabungan yang menyertakan "HTMLorMML" akan memilih keluaran NativeMML di Firefox, misalnya. Ini dapat ditimpa dengan menentukan

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  MMLorHTML: { prefer: { Firefox: "HTML" } }
});
</script>

sebelum memuat MathJax.js untuk memaksa Firefox menggunakan penyaji keluaran HTML-CSS daripada penyaji NativeMML (sambil tetap mengizinkan IE/MathPlayer untuk menggunakan MathML).

Saya masih bekerja di cabang ini, jadi perubahan saya masih dilakukan. Saya tidak senang dengan metode yang digunakan untuk menangani referensi penerusan, dan mungkin mengubah cara kerjanya (meskipun itu akan bersifat internal, dan tidak akan mengubah tampilannya bagi penulis atau pengguna).

Davide

Itu benar-benar fantastis, terima kasih banyak!

Satu bug, mengetik \text{(see \eqref{cs})} saat dalam mode matematika tampaknya memakan tanda kurung penutup kedua. Menambahkan spasi sebelum bekerja dengan sempurna.

Oke, saya akan memeriksanya. Harus ada indeks yang mati sebesar 1 saat referensi dihapus dari teks.

Saya telah memperbaiki indeks yang salah yang menyebabkan karakter setelah \eqref dihapus. Anda dapat memperbarui salinan cabang issue71 untuk mendapatkan perbaikan.

Davide

Catatan: Saya juga memperbaruinya sehingga Anda tidak perlu meminta ekstensi AMSmath secara eksplisit; jika Anda mengaktifkan penomoran otomatis, itu akan dimuat secara otomatis sekarang.

Davide

==> Pengaturan ke testcase diinginkan karena saya berencana untuk menambahkan unit test untuk mencakup fitur ini.

Ada banyak hal yang harus diuji, di sini. Referensi maju, referensi mundur, referensi ke label yang tidak ada, penggunaan \tag untuk mengesampingkan penomoran otomatis, penggunaan \notag dan \nonumber untuk mencegah penomoran, penomoran untuk lingkungan AMS yang berbeda, pengaturan yang berbeda untuk autoNumber , dan seterusnya. Ini akan menyakitkan, aku minta maaf untuk mengatakannya.

Ya, saya menyadarinya. Itu sebabnya saya hanya menandai masalah seperti yang diinginkan testcase dan menunda penulisan tes ini.
Namun, jika beberapa kontributor cukup baik untuk membuat daftar kasus penggunaan yang berbeda dan memberikan ide untuk pengujian (bahkan mungkin menulisnya), maka itu akan sangat membantu.

Saya sudah menyiapkan beberapa tes untuk ini.

Konfigurasi/tex2jax/processRefs-1.html
Configuration/TeX/equationNumbers/autoNumber-1.html
Configuration/TeX/equationNumbers/autoNumber-2.html
Configuration/TeX/equationNumbers/autoNumber-3.html
Configuration/TeX/equationNumbers/autoNumber-4.html
Configuration/TeX/equationNumbers/formatID-1.html
Configuration/TeX/equationNumbers/formatNumber-1.html
Configuration/TeX/equationNumbers/formatTag-1.html
Configuration/TeX/equationNumbers/formatURL-1.html
LaTeXToMathML/references/eqref-1.html
LaTeXToMathML/references/label-1.html
LaTeXToMathML/references/ref-1a.html
LaTeXToMathML/references/ref-1b.html
LaTeXToMathML/references/ref-2.html
LaTeXToMathML/references/ref-3.html
LaTeXToMathML/references/tag-1.html
LaTeXToMathML/references/tag-2.html
LaTeXToMathML/references/notag-1.html

==> Di testsuite

Ada koma tambahan di tex2jax.js, baris 181, yang membuat IE crash.

Tampaknya mlabeledtr menghilang dengan Firefox ketika MathML asli diaktifkan. Pertimbangkan misalnya:

http://devel.mathjax.org/testing/testsuite/Configuration/TeX/equationNumbers/formatTag-1.html?mathJaxPath=http ://devel.mathjax.org/testing/mathjax/dpvc/issue71/

Ada koma tambahan di tex2jax.js, baris 181, yang membuat IE crash.

Ya, saya sudah melihatnya dan telah memperbaikinya di cabang v2.0-candidate (karena saya telah menggabungkan semua cabang yang terpisah, saya tidak lagi membuat perubahan di dalamnya secara terpisah).

Tampaknya mlabeledtr menghilang dengan Firefox ketika MathML asli diaktifkan.

Ini karena Firefox tidak mengimplementasikan <mlabeledtr> , dan menghapus baris seperti itu, jadi daripada matematikanya hilang, MathJax berubah menjadi <mtr> biasa dan menghapus label sebagai kompromi. (Ini seharusnya ada dalam daftar masalah Firefox, jika belum. Sekarang penomoran otomatis adalah bagian dari MathJax, ini akan menjadi batasan yang lebih serius untuk MathML asli Firefox, dan merupakan salah satu alasan mengapa v2. 0 mungkin akan mengubah default untuk memilih HTML-CSS daripada NativeMML untuk Firefox.)

Untuk Firefox, mengapa kami menghapus labelnya? Kita dapat meninggalkannya, bahkan jika posisinya tidak baik?

Karena label adalah <mtd> pertama dalam <mlabeledtr> , hanya mengganti <mlabeledtr> dengan <mtr> akan membuang kolom. Anda harus kembali dan memasukkan entri kosong di semua baris tabel lainnya (tidak berlabel), atau harus memindahkan label ke akhir baris, mungkin menambahkan entri kosong untuk memastikan bahwa label sudah melewati kolom kanan yang digunakan di baris tabel lainnya. Kedua hal ini lebih rumit daripada yang ingin saya lakukan. Harapan dengan jax keluaran NativeMML adalah untuk tidak memodifikasi MathML lebih dari yang diperlukan, dan saya hanya melakukan ini untuk menghindari kehilangan matematika sepenuhnya. Saya rasa tidak bijaksana untuk mencoba mengatasi setiap bug MathML asli di setiap perender browser. Harapan awal saya adalah Firefox pada akhirnya akan mengimplementasikan fitur yang hilang, dan penghapusan label akan bersifat sementara, tetapi tampaknya ini tidak akan terjadi dalam waktu dekat.

Davide

Perhatikan bahwa perubahan untuk mlabeledtr ditargetkan untuk Firefox 9:
https://bugzilla.mozilla.org/show_bug.cgi?id=356870

Konten mlabeledtr sekarang ditampilkan sebagai baris normal, kecuali label yang disembunyikan secara default (ini dapat diganti menggunakan aturan CSS).

Untuk bug untuk mengimplementasikan mlabeledtr, lihat
https://bugzilla.mozilla.org/show_bug.cgi?id=689641

Firefox 9 telah dirilis dan menyertakan solusi untuk mlabeledtr, jadi MathJax tidak perlu melakukannya sendiri untuk versi tersebut.

Apakah ada peluang untuk mendapatkan \label untuk (mungkin opsional) mengatur atribut id pada persamaan menjadi sesuatu yang dapat diprediksi dan diturunkan dari label? Ini akan memungkinkan referensi dari dokumen lain ke persamaan yang diberikan.

Misalnya, saat ini, jika saya punya

\begin{align}
F &= m a \label{NewtonsLaw}
\end{align}

Ini akan menghasilkan id mjx-eqn-1 jika itu persamaan pertama. Ini berfungsi di dalam dokumen karena \eqref{NewtonsLaw} menghasilkan tautan ke mjx-eqn-1 .

Namun, saya tidak dapat merujuk ke persamaan dari dokumen HTML lain tanpa mengetahui nomor persamaan. yaitu saya tidak dapat membuat tautan eksternal ke http://www.mywebsite.com/mypage.html#mjx -eqn-NewtonsLaw

@grahamdennis -- ide bagus. Saya telah memodifikasi cabang v2.0-candidate untuk memasukkan perubahan yang diperlukan untuk mewujudkannya. Perubahan yang diperlukan kecil, sehingga Anda dapat mengedit salinan file AMSmath.js dan TeX/config.js Anda sendiri untuk menyertakannya.

Davide

Terima kasih @dpvc!

Saya akan memperbarui tes untuk memperhitungkan perubahan terbaru.

Firefox 9 telah dirilis dan menyertakan solusi untuk mlabeledtr, jadi MathJax tidak perlu melakukannya sendiri untuk versi tersebut.

Davide, apakah Anda mempertimbangkan komentar ini untuk MathJax 2.0? Dengan solusi MathJax dihapus, pengguna Firefox akan dapat menampilkan label jika mereka mau, menggunakan aturan CSS sederhana mlabeledtr > mtd:first-child { display: table-cell; } .

Ya, solusi untuk <mlabeledtr> diterapkan secara kondisional, dan tidak digunakan untuk FF9 ke atas. Lihat baris file jax.js NativeMML 492 .

OK bagus! Terima kasih.

Bisakah saya menyetelnya ke persamaan angka hanya jika \label ditambahkan? Saya tidak terlalu sering menggunakan \label dan \ref.

Saya tahu saya dapat menggunakan lingkungan persamaan* di LaTeX, tetapi sayangnya, saya menggunakan Penurunan harga dan * dicadangkan untuk sintaks penurunan harga.

Terima kasih.

@emptymalei , tidak ada pengaturan untuk apa yang Anda cari, tetapi Anda dapat menggunakan makro \tag{} eksplisit saat Anda menginginkan persamaan bernomor. Ini akan mengharuskan Anda untuk melakukan penomoran sendiri, tetapi jika Anda hanya membutuhkan beberapa referensi, itu mungkin cocok untuk Anda. Jadi, Anda akan menggunakan \label{} dan \tag{} bersama-sama untuk memberi nomor pada persamaan dan memberikan label untuk merujuknya nanti.

@dpvc Terima kasih. Saya akan mencoba \tag{}.

Hai,

Terima kasih semua untuk proyek luar biasa dan fitur luar biasa ini. Di sini saya punya masalah kecil. Saat memodifikasi matematika dengan \label di dalamnya, label akan didefinisikan berlipat ganda (untuk mereproduksi ini, Anda dapat mencoba mengedit rumus dengan \label di demo langsung MathJax mana pun).

Saya percaya itu bisa diperbaiki dengan menghapus definisi label di MathJax saat mengganti elemen HTML. Tetapi saya belum menemukan antarmuka apa pun untuk menginformasikan penghapusan ini, atau kode apa pun yang dapat menghapus definisi tanpa menyegarkan halaman.

Apakah ada yang tahu apa yang bisa saya lakukan?

Terima kasih sebelumnya.

Tolong jangan gunakan kembali utas.

Anda akan ingin membaca dokumentasi tentang menyetel ulang nomor persamaan.

Baiklah saya pikir itu adalah fitur yang tidak lengkap daripada bug. Saya akan memulai masalah baru.

Nomor persamaan dapat diatur ulang, tetapi label tidak dapat.

Label juga disetel ulang oleh resetEquationNumbers() , meskipun dokumentasinya bisa lebih jelas tentang itu.

Terima kasih banyak! Itu pasti penggunaan saya yang salah yang menyebabkan kegagalan. Terima kasih lagi. Maaf mengganggu.

Tampaknya MathJax.InputJax.TeX.resetEquationNumbers() adalah konstruksi 2.x: http://docs.mathjax.org/en/v2.7-latest/advanced/typeset.html#reset-automatic-equation-numbering
argumen opsional tidak berdokumen tetapi dijelaskan oleh Davide di https://github.com/mathjax/MathJax/issues/1705#issuecomment-282743204, terima kasih.
Di 3.x diganti dengan MathJax.texReset() http://docs.mathjax.org/en/v3.0-latest/web/typeset.html#tex-reset
[tentu saja, banyak hal berubah di 3.0. ini sebagian besar untuk membantu saya menemukan ini lagi di masa mendatang karena saya masih menggunakan 2.x ;-) Agak disayangkan banyak tautan dokumen 2.x sekarang rusak jika mereka "terbaru/"...]

Apakah halaman ini membantu?
0 / 5 - 0 peringkat