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.

Vincent Ramdhanie
sumber
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}
ChrisN
sumber
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

Konrad Rudolph
sumber
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.

pemrogram ulang
sumber
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
11

LGrind melakukan ini. Ini adalah paket LaTeX yang sudah ada sejak adam adalah seorang koboi dan memiliki dukungan untuk banyak bahasa pemrograman.

ConcernedOfTunbridgeWells
sumber
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

Adam
sumber
4

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

Paul Biggar
sumber