Çeşitli dillerde kodun sözdizimi ile vurgulanması için LaTeX paketi


164

Ben sözdizimi kod vurgulama yapan bir LaTeX paketi arıyorum. Örneğin, şu anda kod yazmak için verbatim bloğunu kullanıyorum:

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

Ve bu, belgemdeki kodu görüntülemek için iyi çalışıyor. Ancak, HTML işaretlemesini bir IDE'nin çıktı belgesinde olduğu gibi vurgulamak istediğimi varsayalım? Yardımcı olabilecek bir paket var mı?

Java, C #, HTML, CSS gibi çeşitli diller için de aynısını yapmak istiyorum.


4
Memnun değilim lstlisting. XML kodunu hiç vurgulamaz ve yabancı Unicode karakterleri kullanılırken vidalanır. Görünüşe göre JavaScript de desteklenmiyor. LGrind böyle şeyleri halledebilir mi?
webjunkie

Yanıtlar:


157

Listeler paketini kullanabilirsiniz . Birçok farklı dili destekler ve çıktıyı özelleştirmek için birçok seçenek vardır.

\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
Bu varsayılan olarak renkler yapar mı? Test kullanımımda renkli çıktı görmüyorum ve bunun benim tarafımda bir hata olup olmadığından emin değilim veya bir özellik değil.
Benson

12
Burada bir cevap buldum: tjansson.dk/?p=419 . Farklı özellikler için her türlü stili ayarlamak için lstset komutunu kullanabilirsiniz.
Benson

144

Benzer bir soru sorduktan sonra Pygments kullanan ve bundan birkaç seçenek daha sunan başka bir paket oluşturdum texments. Denir mintedve oldukça kararlı ve kullanılabilir.

Sadece göstermek için, darp ile vurgulanan bir kod:

Örnek kod


Bu aslında oldukça iyi bir iş. Pygments'ı kurmak zorunda kalmak biraz zorlayıcı ama eminim ki çoğu insan bunu yapmaya istekli olacak.
Vincent Ramdhanie

1
@Vincent: Ne yazık ki, Pygments'ı Windows'a yüklemek şu anda biraz daha karmaşıktır (kullanıcı PATHdeğişkeni uyarlamalı ve bir cmd betiği oluşturmalıdır). Bu adımı kolaylaştırmak için Pygments koruyucularını pygmentizebir .exesargı ile göndermeye ikna etmeyi umuyorum .
Konrad Rudolph

1
Hem listeleri ve darphane / Pygments denedikten sonra darphane çok daha iyi (daha esnek) olduğuna karar verdi. Ancak, bir düzine çemberin içinden atlamak, MiKTeX 2.8'e yükseltmek, Python kurmak, diğer bileşenleri kurmak vb. Darbeli belgeler zayıftır ve uzun satırların kesilmesini desteklemez. Ama sonunda Java / XML'i Eclipse renklerde oluşturmayı başardım! jevon.org/wiki/Eclipse_Pygments_Style
jevon

@soundasleepful: Darbeli belgeler sürekli güncellenir. ;-) Aslında oldukça kapsamlı buluyorum (tabii ki önyargılıyım) ama herhangi bir şikayet için mutluyum. Haliyle, “gereksinimler” bölümü kuşkusuz korkunçtur.
Konrad Rudolph

3
mintedhem ShareLatex hem de Overleaf üzerine kurulur ve çalışır. Kendinizi Pygments yüklemenin baş ağrısından kurtarın;)
grofte

21

Pygments'ı tavsiye ederim . Herhangi bir dilde bir kod parçasını kabul eder ve sözdizimi vurgulanmış LaTeX kodunu çıkarır. Çıktısını üretmek için fancyvrb ve renk paketleri kullanır . Şahsen listeleme paketine tercih ederim. Bence fancyvrb çok daha güzel sonuçlar yaratıyor.


1
Listelerin arkasındaki makrolojiye hayran kalırken, aynı zamanda pigmentlerin de bir kenarı olduğunu kabul ediyorum: daha güzel vurgulama, daha kolay özelleştirme, sözdizimlerini karıştırma becerisi ve HTML gibi Latex dışındaki formatlara çıktı verme yeteneği.
Charles Stewart

Bir beamertür belgede bu görünüşe göre tek işlevsel seçenektir. Ne ile mintedne de listingsdoğru derleme beamer.
Luís de Sousa

Evet, listingsbirlikte kullandım beamer, ancak listeleri içeren karelerin olduğunu belirtmelisiniz [fragile].
Olağanüstü


10

Darbeli paketi , liste paketi yerine geliştirici Konrad Rudolph'tan bahsedildiği gibi kullanacağım . İşte nedeni:

listeleme paketi

Listeleme paketi varsayılan olarak renkleri desteklemez. Renkleri kullanmak için renk paketini eklemeniz ve burada matlab kodu için açıklandığı gibi \ lstset komutuyla renk kurallarını kendiniz tanımlamanız gerekir .

Ayrıca, liste paketi unicode ile iyi çalışmaz, ancak burada ve burada açıklandığı gibi bu sorunları düzeltebilirsiniz .

Aşağıdaki kod

\documentclass{article}
\usepackage{listings}

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

aşağıdaki resmi üretir:

resim açıklamasını buraya girin

darp edilen paket

Darbeli paket renkleri, unicode'u destekler ve harika görünür. Bununla birlikte, kullanabilmek için, python 2.6 ve pygment'lara sahip olmanız gerekir . Ubuntu'da, terminaldeki python sürümünüzü

python --version

ve ile pigmentler yükleyebilirsiniz

sudo apt-get install python-pygments

Ardından, pygments için basılan markaları aramaları beri sen ile derlemek için gereken -shell-kaçış böyle

pdflatex -shell-escape yourfile.tex

TexMaker gibi bir lateks editörü kullanıyorsanız, yine de editörde derleyebilmeniz için bir kullanıcı komutu eklemenizi tavsiye ederim.

Aşağıdaki kod

\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}

aşağıdaki resmi üretir:

resim açıklamasını buraya girin


4

Çoğunlukla kağıtlarda lstlistings kullanıyorum, ancak renkli çıktılar için (slaytlar için) bunun yerine pıhtıları kullanıyorum.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.