Girintili bu LaTeX belgesine kod ekleme


426

LaTeX belgesine nasıl kod eklerim? Gibi bir şey var mı:

\begin{code}## Heading ##
...
\end{code}

Gerçekten ihtiyacım olan tek şey girinti ve sabit genişlikli yazı tipi. Sözdizimi vurgulama kesinlikle gerekli olmasa da güzel olabilir.


Tam bir kopya değil, ancak cevaplar aynı zemini kapsıyor: bkz. Stackoverflow.com/questions/741985/…
Charles Stewart

Ayrıca burada bir takip sorum var: stackoverflow.com/questions/3408996/…
sixtyfootersdude

Yanıtlar:


630

listingsPaketi kullanın .

LaTeX başlığı için basit yapılandırma (önce \begin{document}):

\usepackage{listings}
\usepackage{color}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\lstset{frame=tb,
  language=Java,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=flexible,
  basicstyle={\small\ttfamily},
  numbers=none,
  numberstyle=\tiny\color{gray},
  keywordstyle=\color{blue},
  commentstyle=\color{dkgreen},
  stringstyle=\color{mauve},
  breaklines=true,
  breakatwhitespace=true,
  tabsize=3
}

İle belgenin ortasındaki varsayılan dili değiştirebilirsiniz \lstset{language=Java}.

Belgedeki kullanım örneği:

\begin{lstlisting}
// Hello.java
import javax.swing.JApplet;
import java.awt.Graphics;

public class Hello extends JApplet {
    public void paintComponent(Graphics g) {
        g.drawString("Hello, world!", 65, 95);
    }    
}
\end{lstlisting}

İşte sonuç:

Örnek resim


3
Kodunuzla ilgili takip eden bir sorum var. Şansınız varsa bir göz atın: stackoverflow.com/questions/3408996/…
sixtyfootersdude

1
Kod satırları arasındaki boşluğu azaltmanın bir yolu var mı?
Sukhvir

Lateks'te bir şeklin altında yazılan metne benzer şekilde, kod pasajının altına küçük metin eklemek mümkün müdür?
Brian J

@Brian bunun farkında değilim. Belki de kodun a içinde figureolması etkiyi başarabilir.
Cloudanger

Bu paketin artık eski olduğunu duydum!
xxx -

165

Aynen ortamı da kullanabilirsiniz

\begin{verbatim}
your
code
example
\end{verbatim}

57
Aynen ortamda sekmelerin kullanılmasında bir sorun var. Sekmeler "boşluğa" dönüştürülürse sorun kaybolur.
midtiby

1
Bu örnek metin dosyası içeriğini göstermek için iyidir (örneğin, bir program tarafından okunacak / işlenecek metin verileri).
nalyd88

İki sütun makalesinde, kenar boşluklarını iyi işlemez.
Sazzad Hissain Khan

115

Satır içi kodu nasıl ekleyeceğiniz aşağıda açıklanmıştır:

Sen ile satır içi kod ekleyebilirsiniz {\tt code }veya \texttt{ code }. Satır içi kodu biçimlendirmek istiyorsanız, kendi komutunuzu yapmak en iyisi olacaktır

\newcommand{\code}[1]{\texttt{#1}}

Ayrıca, kod bloklarının diğer dosyalardan

\lstinputlisting[breaklines]{source.c}

breaklinesgerekli değil, ama yararlı buluyorum. Bunun için \usepackage{ listeler belirtmeniz gerekeceğini unutmayın }.

Güncelleme: Listeler paketi \lstinline, \lstlistingve \lstinputlistingkomutlarıyla aynı sözdizimi vurgulama özelliklerine sahip olan komutu da içerir (yapılandırma ayrıntıları için Cloudanger'ın cevabına bakın). Diğer birkaç cevapta belirtildiği gibi, \mintinlinekomutu sağlayan darplanmış paket de var . Gibi \lstinline, \mintinlinenormal darp edilmiş bir kod bloğu ile aynı sözdizimi vurgulamasını sağlar:

\documentclass{article}

\usepackage{minted}

\begin{document}
  This is a sentence with \mintinline{python}{def inlineCode(a="ipsum)}
\end{document}

1
anahtar kelime renklerini etkinleştiren satır içi kod için daha iyi bir yol var mı?
nano

Evet. Onları tartışmak için cevabımı güncelledim.
alan

daha okunabilir görünmesi için boşlukları / sekmeleri nasıl eklersiniz?
Charlie Parker

32

mintedBiçimlendirmeyi yapmak için Pygments'a dayanan gibi özel paketler , listingspakete göre çeşitli avantajlar sunar . mintedKılavuzdan alıntı yapmak için ,

Pygments, geleneksel paketlere kıyasla çok daha üstün sözdizimi vurgulama sağlar. Örneğin, girişler temel olarak yalnızca dizeleri, yorumları ve anahtar kelimeleri vurgular. Pygments ise kaynak dilin destekleyebileceği herhangi bir token türünü vurgulamak için tamamen özelleştirilebilir. Bu, dizeler, sayılar, farklı türde tanımlayıcılar ve HTML etiketleri gibi egzotik yapıların içindeki özel biçimlendirme dizilerini içerebilir.


1
Darp etmeyi denedim, belgeler oldukça basit. Varsayılan stil iyi çıkmaktır.
user2262504

5
Bu, Pygmentsic için gereken harici çağrı nedeniyle birçok kullanıcı için tatmin edici olmayan bir çözüm olabilir. Özellikle, -shell-escapeyönerge ile lateks çağırma gereksinimi , en iyi ihtimalle, mevcut yapı sistemlerinde küçük bir değişikliktir ve en kötüsü, bazı kullanıcıların güvenlik tercihleriyle uyumsuzdur.
KDN

12

Darbeli kullanın .

Güçlü Pygments kütüphanesini kullanarak LaTeX'te etkileyici sözdizimi vurgulamayı kolaylaştıran bir pakettir . Paket ayrıca, fancyvrb kullanarak vurgulanan kaynak kodu çıktısını özelleştirmek için seçenekler sunar .

Diğer paketlerden çok daha gelişmiş ve özelleştirilebilir!


Ancak, benzer bir cevapta daha önce de belirtildiği gibi, -shell-escapebazı insanlar için berbat olabilir.
Egor Hans

8

Basılan içinde workes Overleaf , TeX Live ve MiKTeX.

Misal:

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

\begin{minted}[mathescape, linenos]{python}

# Note: $\pi=\lim_{n\to\infty}\frac{P_n}{d}$
title = "Hello World"

sum = 0
for i in range(10):
 sum += i

\end{minted}

\end{document}

Çıktı:

resim açıklamasını buraya girin


6

Burada henüz belirtilmediğinden, bir seçenek daha, paket eklemeye değer olabilir spverbatim(sözdizimi vurgulaması yok):

\documentclass{article}
\usepackage{spverbatim}

\begin{document}

\begin{spverbatim}
  Your code here
\end{spverbatim}

\end{document}

Ayrıca, sözdizimi vurgulaması gerekli değilse, paket alltt:

\documentclass{article}
\usepackage{alltt}

\begin{document}

\begin{alltt}
  Your code here
\end{alltt}

\end{document}

1
Bu az çok istediğim şey, ama sekmelerle girintili görünmüyorum. Daha kolay girinti sağlayan benzer bir paketi nasıl girintilersiniz / var mı?
Darokrithia

1
@Darokrithia Cevabımı düzenledim: Girintiyi kontrol edebilir / yüzleşebilir misiniz? :)
MattAllegro

1
Çalışmıyor gibi görünüyor. Size kullandığım kodu gönderebilirim, ancak biçimlendirme yorumlarda yok edilir. BTW Farklı bir cevap kullandım ve iyi çalıştı, ancak bunun gelecekteki okuyucular için hala düzeltilmesi gerektiğini hissediyorum.
Darokrithia

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.