Paket LaTeX untuk penyorotan sintaksis kode dalam berbagai bahasa


164

Saya mencari paket LaTeX yang tidak menyoroti sintaks pada kode. Misalnya, sekarang saya menggunakan blok kata demi kata untuk menulis kode:

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

Dan ini berfungsi dengan baik untuk menampilkan kode pada dokumen saya. Tapi, anggaplah saya ingin menyoroti markup HTML seperti cara IDE dalam dokumen keluaran? Apakah ada paket yang bisa membantu?

Saya ingin melakukan hal yang sama untuk berbagai bahasa seperti Java, C #, HTML, CSS dan sebagainya.


4
Saya tidak puas dengan itu lstlisting. Sama sekali tidak menyoroti kode XML dan gagal ketika menggunakan karakter Unicode asing. JavaScript juga tidak didukung, seperti yang terlihat. Bisakah LGrind menangani hal-hal seperti itu?
webjunkie

Jawaban:


157

Anda dapat menggunakan paket cantuman . Ini mendukung banyak bahasa yang berbeda dan ada banyak opsi untuk menyesuaikan output.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

20
Apakah ini melakukan warna secara default? Saya tidak melihat output berwarna dalam penggunaan pengujian saya, dan saya tidak yakin apakah itu merupakan kesalahan pada bagian saya, atau memang bukan fitur.
Benson

12
Saya menemukan jawaban di sini: tjansson.dk/?p=419 . Anda cukup menggunakan perintah lstset untuk mengatur semua jenis gaya untuk properti yang berbeda.
Benson

144

Setelah mengajukan pertanyaan serupa saya buat paket lain yang menggunakan Pygments, dan menawarkan beberapa lebih banyak pilihan daripada texments. Ini disebut minteddan cukup stabil dan dapat digunakan.

Untuk memamerkannya, inilah kode yang disorot dengan dicetak:

Kode contoh


Ini sebenarnya pekerjaan yang cukup baik. Harus menginstal Pygments memang menimbulkan sedikit tantangan, tetapi saya yakin sebagian besar orang akan bersedia melakukannya.
Vincent Ramdhanie

1
@Vincent: Sayangnya, menginstal Pygments pada Windows sedikit lebih rumit saat ini (pengguna harus mengadaptasi PATHvariabel dan membuat skrip cmd). Saya berharap untuk meyakinkan pengelola Pygments untuk mengirim pygmentizedengan .exepembungkus agar langkah ini lebih mudah.
Konrad Rudolph

1
Setelah mencoba kedua daftar dan dicetak / Pygments saya memutuskan dicetak jauh lebih baik (lebih fleksibel). NAMUN itu akan membutuhkan melompat melalui selusin hoop, meningkatkan ke MiKTeX 2.8, menginstal Python, menginstal komponen lain dan sebagainya. Dokumentasi Minted buruk dan tidak mendukung garis panjang. Tapi akhirnya saya berhasil membuat Java / XML dalam warna Eclipse! jevon.org/wiki/Eclipse_Pygments_Style
jevon

@soundasleepful: Dokumentasi yang dicetak terus diperbarui. ;-) Sebenarnya saya merasa cukup luas (tentu saja saya bias) tapi saya senang untuk mengatasi keluhan. Seperti berdiri, bagian "persyaratan" diakui mengerikan.
Konrad Rudolph

3
minteddiinstal dan bekerja pada ShareLatex dan Overleaf. Selamatkan diri Anda dari sakit kepala saat memasang Pygments;)
grofte

21

Saya merekomendasikan Pygments . Ia menerima sepotong kode dalam bahasa apa pun dan menghasilkan sintaks yang disorot kode LaTeX. Ini menggunakan paket fancyvrb dan warna untuk menghasilkan outputnya. Saya pribadi lebih suka ke paket listing. Saya pikir fancyvrb menciptakan hasil yang jauh lebih cantik.


1
Sementara saya mengagumi makrologi di balik daftar, saya juga setuju bahwa pygments memiliki keunggulan: penyorotan yang lebih baik, kustomisasi yang lebih mudah, beberapa kemampuan untuk mencampur sintaksis, dan kemampuan untuk menghasilkan format selain format Lateks, seperti HTML.
Charles Stewart

Pada beamerdokumen jenis ini rupanya satu-satunya opsi fungsional. Baik mintedatau listingsmengkompilasi benar dengan beamer.
Luís de Sousa

Ya, saya telah menggunakan listingsdengan beamer, tetapi Anda harus menentukan bahwa frame yang mencakup listing yang [fragile].
Supernormal


10

Saya akan menggunakan paket yang dicetak seperti yang disebutkan dari pengembang Konrad Rudolph, bukan dari daftar paket . Inilah alasannya:

daftar paket

Paket listing tidak mendukung warna secara default. Untuk menggunakan warna, Anda harus menyertakan paket warna dan mendefinisikan sendiri aturan warna dengan perintah \ lstset seperti yang dijelaskan untuk kode matlab di sini .

Selain itu, paket cantuman tidak berfungsi dengan baik dengan unicode, tetapi Anda dapat memperbaiki masalah tersebut seperti yang dijelaskan di sini dan di sini .

Kode berikut

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

menghasilkan gambar berikut:

masukkan deskripsi gambar di sini

paket dicetak

Paket yang dicetak mendukung warna, unicode dan terlihat mengagumkan. Namun, untuk menggunakannya, Anda harus memiliki python 2.6 dan pygments . Di Ubuntu, Anda dapat memeriksa versi python Anda di terminal dengan

python --version

dan Anda dapat menginstal pygments dengan

sudo apt-get install python-pygments

Kemudian, karena dicetak membuat panggilan ke pygments, Anda perlu mengkompilasinya dengan -shell-escape seperti ini

pdflatex -shell-escape yourfile.tex

Jika Anda menggunakan editor lateks seperti TexMaker atau sesuatu, saya akan merekomendasikan untuk menambahkan perintah-pengguna, sehingga Anda masih dapat mengompilasinya di editor.

Kode berikut

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}{html}
    <!DOCTYPE html>
    <html>
       <head>
           <title>Hello</title>
       </head>

       <body>Hello</body>
    </html>
\end{minted}
\end{document}

menghasilkan gambar berikut:

masukkan deskripsi gambar di sini


4

Saya kebanyakan menggunakan lstlistings di kertas, tetapi untuk output berwarna (untuk slide) saya menggunakan pygments.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.