Saya perlu menyoroti kode sumber di LaTeX. Paket tersebut listings
tampaknya menjadi pilihan terbaik untuk sebagian besar kasus penggunaan dan bagi saya, sampai sekarang.
Namun, sekarang saya perlu lebih banyak fleksibilitas. Secara umum, apa yang saya cari adalah lexer nyata . Secara khusus, saya perlu (untuk definisi bahasa sendiri) untuk mendefinisikan (dan menyoroti!) Gaya nomor sendiri. listings
tidak mengizinkan penyorotan angka dalam kode. Namun, saya perlu membuat sesuatu seperti ini:
listings
juga tidak dapat mengatasi pembatas acak untuk string. Pertimbangkan kode Ruby yang valid berikut:
s = %q!this is a string.!
Di sini, !
dapat diganti oleh hampir semua pembatas.
(Itu listings
tidak bisa menangani Unicode juga cukup menjengkelkan, tapi itu masalah lain.)
Idealnya, saya mencari perpanjangan listings
yang memungkinkan saya untuk memberikan aturan lexing yang lebih kompleks. Tetapi selain itu, saya juga mencari alternatif yang layak.
Utas lain menyarankan menggunakan Pygments yang dapat menghasilkan keluaran LaTeX. Bahkan ada paket - texments
- untuk memudahkan transisi.
Namun, ini sangat kekurangan fitur. Secara khusus, saya tertarik pada listings
penomoran baris-gaya, referensi baris kode sumber, dan kemungkinan menanamkan LaTeX dalam kode sumber (opsi texcl
dan mathescape
dalam listings
).
Sebagai contoh, inilah set kode sumber listings
yang menunjukkan beberapa hal yang harus disediakan oleh pengganti:
["Tambahan Sideways" dimodifikasi dari Bit Twiddling Hacks]
sumber
Jawaban:
Mengambil nasihat Norman ke dalam hati, saya telah meretas bersama solusi yang menggunakan Pygments ( tambalan ) untuk menyoroti dan mendorong sebanyak mungkin fitur tanpa meledak ;-)
Saya juga telah membuat paket LateX, setelah patch Pygments saya dirilis di versi 1.2 ...
Menyajikan dicetak
minted adalah paket yang menggunakan Pygments untuk memberikan highlight sintaksis terkemuka di LaTeX. Sebagai contoh, ini memungkinkan output berikut.
Berikut adalah file minimal untuk mereproduksi kode di atas (perhatikan bahwa termasuk karakter Unicode mungkin memerlukan XeTeX)!
Ini dapat diketik menggunakan perintah berikut:
(Tapi dicetak juga bekerja dengan
latex
danpdflatex
...)minted.sty
bekerja serupa dengantexments.sty
tetapi memungkinkan fitur tambahan.Bagaimana cara mendapatkannya
dicetak adalah terdaftar di CTAN ( paket Info )
Dokumentasi tentu saja disertakan.
minted sekarang dikelola oleh Geoffrey Poore. Versi pengembangan, termasuk
.sty
file terbaru , tersedia di github.com/gpoore/minted , dan dapat dikloning dari sana.Sekali lagi, terima kasih kepada Norman karena telah memotivasi saya untuk memproduksi paket ini.
sumber
easy_install
) prosesnya tidak akan pernah sangat mulus.TeX (terkenal) Turing-complete, tapi saya cukup yakin Anda harus menulis ekstensi ini sendiri. Dokumentasinya memperjelas bahwa penulis asli
listings
menjadi yatim piatu pada tahun 2004, dan belum diperbarui sejak 2006. Paket ini tidak dirancang untuk mengganti format literal angka, tetapi Anda mungkin dapat memodifikasinya dengan mengubah definisi\lst@ProcessDigit
. Jika itu tidak berhasil, Anda harus memahami secara detail bagaimana opsi "gaya pengenal" bekerja, dan Anda harus menduplikasi mesin itu untuk literal numerik Anda.Saya tidak begitu mengerti mengapa Anda begitu enggan untuk memperkenalkan alat eksternal ke dalam rantai alat Anda, tetapi karena Anda, Anda harus melakukan pekerjaan ekstra. Setelah melihat kode sumber, saya berharap bahwa memodifikasi
listings
harus dimungkinkan, tetapi saya pribadi akan memilih untuk memproses ulang LaTeX saya sebagai gantinya.sumber
\label
s di dalam kode.listings
, saya sudah melihat sumbernya - dan sayangnya, saya tidak mengerti sama sekali. Keterampilan TeX saya jauh dari level itu. Sampai sekarang, saya hanya pernah menggunakan subset LaTeX dari TeX.minted
melalui proses penerbitan LNCS Springer.Ini adalah paket yang mengubah kode sumber ke TeX dan LaTeX dengan penyorotan sintaksis. Dimungkinkan untuk menambahkan definisi bahasa pemrograman kustom dengan mudah.
Sorot mendukung 100 bahasa pemrograman dan termasuk 50 tema warna. Ini fitur pemformatan ulang dan indentasi kode.
Saya belum menggunakannya untuk mengetahui cara kerja BAIK, tetapi orang lain yang saya kenal mengatakan itu bekerja dengan cukup baik. Jika saya mendapat kesempatan, saya akan mencobanya sendiri dan melihat.
sumber
highlight
berbagi semua masalah Pygments. Secara khusus, ini bukan paket LaTeX , terlepas dari apa yang dikatakan oleh deskripsinya. Ini hanyalah program yang berdiri sendiri. Masalahnya, seperti halnya dengan Pygments, adalah bagaimana menggunakannya secara bermakna dari dalam LaTeX dan menyediakan semua hal-hal baik yanglistings
dimiliki.