Profesyonel kitaplarda olduğu gibi LaTeX kaynak kodu listesi


329

Lateks kaynak kodu listesi, örneğin Spring Framework için olduğu gibi, bilinen kitaplarda olduğu gibi bir çıktı üretmek için nasıl görünmelidir? Lateks listeleri paketi ile denedim ama aşağıdaki gibi güzel görünüyordu bir şey üretmek mümkün değildi. Bu yüzden öncelikle aşağıdaki örnek gibi bir şey üretmek için biçimlendirme talimatları ile ilgileniyorum (Manning'in Spring in Action için örnek bölümünden ):

Manning'in İlkbaharında Eylemden

DÜZENLEME Özellikle Tormod Fjeldskår'ın yardımıyla istenen görüntüyü üretmek için tam snippet:

\usepackage{listings}
\usepackage{courier}
\lstset{
    basicstyle=\footnotesize\ttfamily, % Default font
    % numbers=left,              % Location of line numbers
    numberstyle=\tiny,          % Style of line numbers
    % stepnumber=2,              % Margin between line numbers
    numbersep=5pt,              % Margin between line numbers and text
    tabsize=2,                  % Size of tabs
    extendedchars=true,
    breaklines=true,            % Lines will be wrapped
    keywordstyle=\color{red},
    frame=b,
    % keywordstyle=[1]\textbf,
    % keywordstyle=[2]\textbf,
    % keywordstyle=[3]\textbf,
    % keywordstyle=[4]\textbf,   \sqrt{\sqrt{}}
    stringstyle=\color{white}\ttfamily, % Color of strings
    showspaces=false,
    showtabs=false,
    xleftmargin=17pt,
    framexleftmargin=17pt,
    framexrightmargin=5pt,
    framexbottommargin=4pt,
    % backgroundcolor=\color{lightgray},
    showstringspaces=false
}
\lstloadlanguages{ % Check documentation for further languages ...
     % [Visual]Basic,
     % Pascal,
     % C,
     % C++,
     % XML,
     % HTML,
     Java
}
% \DeclareCaptionFont{blue}{\color{blue}} 

% \captionsetup[lstlisting]{singlelinecheck=false, labelfont={blue}, textfont={blue}}
\usepackage{caption}
\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox[cmyk]{0.43, 0.35, 0.35,0.01}{\parbox{\textwidth}{\hspace{15pt}#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}}

Belgenizde bununla birlikte kullanın:

\lstinputlisting[label=samplecode, caption=A sample]{sourceCode/HelloWorld.java}

Lütfen daha kesin olun. Bana göre “profesyonel kitaplara benziyor” ve yayınladığınız kadar güzel görünüyor.
Bastien Léonard

2
Lütfen elde etmek istediğim sonuç olarak ekran görüntüsü şeklinde yayınlanan örneği kullanın.
Mork0075

8
Bütünlük uğruna, gönderdiğiniz metne \ usepackage {color} eklemek isteyebilirsiniz. Kayıp olduğunu fark etmeden bir an önce beni aldı.
Robert Massaioli

1
Harika iş! \ Usepackage {caption} ve \ usepackage {graphics} 'i eklemem gerekiyordu ve tek tırnakları dönüştürüyor gibi görünüyor.
hakunin

Merhaba mork kaynak dosyayı nereye yerleştirmem gerekiyor?
Örneğinizde

Yanıtlar:


186

Bana öyle geliyor ki, gerçekten istediğiniz şey başlıkların görünümünü özelleştirmek. Bu en kolay şekilde captionpaket kullanılarak yapılır . Bu paketin nasıl kullanılacağına ilişkin talimatlar için kılavuza (PDF) bakın . Muhtemelen kılavuzun 4. bölümünde açıklandığı gibi kendi özel altyazı formatınızı oluşturmanız gerekecektir.

Düzenleme: MikTex ile test edildi:

\documentclass{report}

\usepackage{color}
\usepackage{xcolor}
\usepackage{listings}

\usepackage{caption}
\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox{gray}{\parbox{\textwidth}{#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}

% This concludes the preamble

\begin{document}

\begin{lstlisting}[label=some-code,caption=Some Code]
public void here() {
    goes().the().code()
}
\end{lstlisting}

\end{document}

Sonuç:

Ön izleme


1
Altyazı biçimini yalnızca \ lstinputlisting bölümünde (myCaption gibi bir şey) yeniden tanımlamak istiyorum. Bunu nasıl yapacağına dair bir ipucun var mı?
Mork0075

1
Deneyin / captionsetup [lstlisting] {seçenekleriniz}
Tormod Fjeldskår

Harika çalışıyor, teşekkürler. Altyazının arkasındaki gri arka planı nasıl gerçekleştireceğiniz hakkında bir fikriniz var mı (ilk yazı örneğimdeki gibi)? Belgelerde bir şey bulamıyorum.
Mork0075

\ Colorbox {grey} {\ parbox {\ textwidth} {\ textcolor {white} {text here}}} ilk gönderi örneğinizin yakınında bir yerde olacağını düşünüyorum.
Tormod Fjeldskår

2
Bu hoş görünüyor, ancak altyazı kutum girintili (metin değil, kutunun kendisi). Giriş de girintili olmadığından nedenini bilmiyorum.
Johan

49

listingsPaketten memnunum :

Liste örneği

İşte nasıl yapılandırabilirim:

\lstset{
language=C,
basicstyle=\small\sffamily,
numbers=left,
numberstyle=\tiny,
frame=tb,
columns=fullflexible,
showstringspaces=false
}

Ben böyle kullanın:

\begin{lstlisting}[caption=Caption example.,
  label=a_label,
  float=t]
// Insert the code here
\end{lstlisting}

1
@lamba: Eğer doğru hatırlıyorsam, Lateks'e sayfanın en üstüne koymasını söyler.
Bastien Léonard

7
Urgh, orantılı yazı tipindeki listeler çok çirkin. (Ayrıca, kültürel nedenlerden dolayı, bazı insanlar (en azından birçok Japon, belki de diğer Asyalı) insanlar için okumak zordur.
Mirabilos

1
@mirabilos: evet, sanırım daha sonra değiştirdim. Bu liste Tamam görünüyordu ama hiç daha fazla girinti / yuvalama ile diğerleri.
Bastien Léonard

32

Ve lütfen, ne yaparsanız yapın, listeler paketini sabit genişlikli yazı tipi kullanacak şekilde yapılandırın (örneğin, örneğinizde olduğu gibi, belgeleri belgelerde bulacaksınız). Varsayılan ayar, resimlerdeki diğer cevaplardan da görülebileceği gibi IMHO, inanılmaz derecede çirkin ve okunamayan bir ızgara üzerinde oransal yazı tipi kümesini kullanır. Orantılı bir yazı tipinde bazı kod dizeleri okumak gerektiğinde ben şahsen çok sinirli.

Sabit genişlikli yazı tipini şu şekilde ayarlamayı deneyin:

\lstset{basicstyle=\ttfamily}

3
Şahsen ben yukarıdaki posta örneğinde olduğu gibi temel = = küçük \ sffamily sütunları = fullf esnek kullanın. Karakterler dikey olarak hizalanmamış, ancak bence \ ttfamily ile olduğundan daha iyi görünüyorlar. Çirkin yukarıda gönderdiğim örneği buluyor musunuz?
Bastien Léonard

Özel örneğiniz iyi görünüyor. Bununla birlikte, uygun bir girinti (sütun hizalaması) bir bileşik ifadesinin ({} blok) boyutunu görmek için büyük bir yardımcı olduğu iç içe bileşik ifadelerden nefret ederim .
zvrba

Aynı şeyi düşünüyordum, ama şimdiye kadar tüm girişlerim iyi görünüyordu.
Bastien Léonard

Tamam, beni ikna ettin, kurulumunu bir kez deneyeceğim :-)
zvrba

1
Yuvalanmış bileşik ifadeler kırmızı bir ringa balığıdır. Girintilerin tümü boşluk içerdiğinden, girintiler diğer karakterlerin genişliğinden bağımsız olarak sıralanacaktır.
jwg

27

Acaba neden kimsenin Darp paketinden bahsetmedi . LaTeX listeleme paketinden çok daha iyi sözdizimi vurgulama özelliğine sahiptir. Pigment kullanır .

$ pip install Pygments

LaTeX'te örnek:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}

\usepackage{minted}

\begin{document}
\begin{minted}{python}
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #to become the incidence matrix
    VT = np.zeros((n*m,1), int)  #dummy variable

    #compute the bitwise xor matrix
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1) 

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{minted}
\end{document}

Sonuç:

resim açıklamasını buraya girin

Bayrağı -shell-escapepdflatex komutuyla kullanmanız gerekir .

Daha fazla bilgi için: https://www.sharelatex.com/learn/Code_Highlighting_with_minted


2
+1. Minted, LaTeX'te kaynak kodunu dizmek için kullanılan pakettir. Kullanımı kolay, zengin özellikli ve iyi belgelenmiş değil, aynı zamanda kaynak koddaki (aksine listings) Unicode karakterlerle de hiçbir problemi yok .
ScumCoder

Tanrım! Çok daha iyi! Öneri için çok teşekkür ederim.
Dmitry Zotikov

21

listingsPaket üzerinde bir deneyin . İşte bir süre önce renkli bir Java listesine sahip olmak için kullandığım bir örnek:

\usepackage{listings}

[...]

\lstset{language=Java,captionpos=b,tabsize=3,frame=lines,keywordstyle=\color{blue},commentstyle=\color{darkgreen},stringstyle=\color{red},numbers=left,numberstyle=\tiny,numbersep=5pt,breaklines=true,showstringspaces=false,basicstyle=\footnotesize,emph={label}}

[...]

\begin{lstlisting}
public void here() {
    goes().the().code()
}

[...]

\end{lstlisting}

Bunu özelleştirmek isteyebilirsiniz. Listeler paketinin birkaç referansı vardır. Sadece onları google.


Teşekkürler. Listeler paketinin hala farkındayım, ancak örneğim gibi biçimlendiremiyorum. Asıl soru bu.
Mork0075

9

algorithmsPakete, özellikle de algorithmçevreye bir göz atın .


1
Teşekkürler. Bu paket daha teorik algirm tartışmasında çok güçlü görünüyor, birçok matematik kitabından biliyorum. Ama bu kadar vurgulamak alışkanlık (başka, önkoşullar varsa), ben yukarıdaki gibi bir biçimlendirme istiyorum.
Mork0075

4
Sadece algorithmçevre hakkında konuşuyordum , değil algorithmic. algorithmoldukça hoş görünen yüzen bir kaptır. İstediğiniz her şeyi, hatta listingbahsedilen her şeyi bile koyabilirsiniz.
avakar

8

Yeni yazı tipleri seçmek gibi yapabileceğiniz başka şeyler de vardır:

\documentclass[10pt,a4paper]{article}
% ... lots of packages e.g. babel, microtype, fontenc, inputenc &c.
\usepackage{color}    % Leave this out if you care about B/W printing, obviously.
\usepackage{upquote}  % Turns curly quotes in verbatim text into straight quotes. 
                      % People who have to copy/paste code from the PDF output 
                      % will love you for this. Or perhaps more accurately: 
                      % They will not hate you/hate you less.
\usepackage{beramono} % Or some other package that provides a fixed width font. q.v.
                      % http://www.tug.dk/FontCatalogue/typewriterfonts.html
\usepackage{listings} 
\lstset {                 % A rudimentary config that shows off some features.
    language=Java,
    basicstyle=\ttfamily, % Without beramono, we'd get cmtt, the teletype font.
    commentstyle=\textit, % cmtt doesn't do italics. It might do slanted text though.
    \keywordstyle=        % Nor does cmtt do bold text.
        \color{blue}\bfseries,
    \tabsize=4            % Or whatever you use in your editor, I suppose.
}
\begin{document} 
\begin{lstlisting}
public final int ourAnswer() { return 42; /* Our final answer */ }
\end{lstlisting} 
\end{document}

2
\ Keywordstyle ve \ tabsize'de ters eğik çizginin bu şekilde çalışmadığı için kaldırılması gerektiğine inanıyorum. Yine de çok yararlı!
Xiphias

2

R kodu için kullanıyorum

\usepackage{listings}
\lstset{
language=R,
basicstyle=\scriptsize\ttfamily,
commentstyle=\ttfamily\color{gray},
numbers=left,
numberstyle=\ttfamily\color{gray}\footnotesize,
stepnumber=1,
numbersep=5pt,
backgroundcolor=\color{white},
showspaces=false,
showstringspaces=false,
showtabs=false,
frame=single,
tabsize=2,
captionpos=b,
breaklines=true,
breakatwhitespace=false,
title=\lstname,
escapeinside={},
keywordstyle={},
morekeywords={}
}

Ve tam olarak şöyle görünüyor

resim açıklamasını buraya girin

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.