Daftar kode sumber LaTeX seperti dalam buku profesional


329

Bagaimana seharusnya daftar kode sumber lateks terlihat menghasilkan output seperti di buku-buku yang dikenal, misalnya satu untuk Kerangka Kerja Spring? Saya sudah mencoba dengan paket daftar lateks tetapi tidak dapat menghasilkan sesuatu yang terlihat sama bagusnya dengan yang di bawah ini. Jadi saya sangat tertarik dengan instruksi pemformatan untuk menghasilkan sesuatu seperti contoh di bawah ini (dari bab sampel Manning untuk Spring in Action ):

Dari Manning's Spring in Action

EDIT Dengan bantuan terutama dari Tormod Fjeldskår inilah potongan lengkap untuk menghasilkan tampilan yang diinginkan:

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

Gunakan dengan ini di dokumen Anda:

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

Harap lebih tepat. Bagi saya daftar yang saya poskan “terlihat seperti di buku profesional” dan “terlihat sama bagusnya” dengan yang Anda posting.
Bastien Léonard

2
Silakan gunakan sampel yang diposting dalam bentuk tangkapan layar sebagai hasil yang ingin saya arsipkan.
Mork0075

8
Demi kelengkapan, Anda mungkin ingin menambahkan \ usepackage {color} ke tex yang Anda poskan. Butuh waktu beberapa saat sebelum saya perhatikan itu hilang.
Robert Massaioli

1
Kerja bagus! Saya harus menambahkan \ usepackage {caption} dan \ usepackage {graphics} dan sepertinya mengonversi satu tanda kutip.
hakunin

Hai mork, di mana saya harus meletakkan file sumber? Dalam contoh Anda Hello.java
RoflcoptrException

Jawaban:


186

Menurut saya, yang Anda inginkan adalah menyesuaikan tampilan teksnya. Ini paling mudah dilakukan dengan menggunakan captionpaket. Untuk instruksi bagaimana menggunakan paket ini, lihat manual (PDF) . Anda mungkin perlu membuat format teks sendiri, seperti yang dijelaskan dalam bab 4 dalam manual.

Sunting: Diuji dengan MikTex:

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

Hasil:

Pratinjau


1
Saya ingin mendefinisikan kembali format teks hanya untuk hal-hal di bagian \ lstinputlisting (seperti myCaption). Apakah Anda punya petunjuk bagaimana melakukan itu?
Mork0075

1
Coba / captionsetup [lstlisting] {your options}
Tormod Fjeldskår

Ini bekerja dengan baik, terima kasih. Apakah Anda punya ide bagaimana mewujudkan latar belakang abu-abu di belakang keterangan (seperti dalam contoh posting awal saya)? Tidak dapat menemukan apa pun di dokumentasi.
Mork0075

Saya pikir \ colorbox {grey} {\ parbox {\ textwidth} {\ textcolor {white} {text di sini}}} akan berada di dekat sampel posting awal Anda.
Tormod Fjeldskår

2
Ini terlihat bagus, tetapi kotak tulisan saya mendapat lekukan (bukan teks, kotak itu sendiri). Saya tidak tahu mengapa, karena cantuman itu juga bukan indentasi.
Johan

49

Saya senang dengan listingspaketnya:

Contoh daftar

Inilah cara saya mengonfigurasinya:

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

Saya menggunakannya seperti ini:

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

1
@amba: jika saya ingat dengan benar, ia memberitahu Latx untuk meletakkannya di bagian atas halaman.
Bastien Léonard

7
Urgh, daftar dalam font proporsional sangat jelek. (Plus, karena alasan budaya, mereka sulit dibaca untuk beberapa (setidaknya banyak orang Jepang, mungkin juga orang Asia lainnya).)
mirabilos

1
@mirabilos: yeah, saya pikir saya mengubahnya nanti. Itu terlihat OK pada daftar ini tetapi tidak sama sekali pada orang lain dengan lebih banyak lekukan / bersarang.
Bastien Léonard

32

Dan tolong, apa pun yang Anda lakukan, konfigurasikan paket cantuman untuk menggunakan font dengan lebar tetap (seperti pada contoh Anda; Anda akan menemukan opsi dalam dokumentasi). Pengaturan default menggunakan jenis huruf proporsional pada kisi, yang, IMHO, sangat jelek dan tidak dapat dibaca, seperti yang dapat dilihat dari jawaban lain dengan gambar. Saya pribadi sangat jengkel ketika saya harus membaca beberapa kode kode dalam font yang proporsional.

Coba atur font lebar tetap dengan ini:

\lstset{basicstyle=\ttfamily}

3
Saya pribadi menggunakan kolom = fullflexible dengan basicstyle = \ small \ sffamily, seperti pada contoh yang saya posting di atas. Karakternya tidak sejajar secara vertikal, tapi saya pikir mereka terlihat lebih baik daripada dengan \ ttfamily Apakah Anda menemukan sampel yang saya posting di atas jelek?
Bastien Léonard

Contoh khusus Anda terlihat baik-baik saja. Namun, saya akan membencinya dengan pernyataan majemuk bersarang di mana lekukan yang tepat (perataan kolom) adalah bantuan besar untuk melihat sejauh mana pernyataan gabungan ({} blok).
zvrba

Saya memikirkan hal yang sama, tetapi sejauh ini semua daftar saya terlihat bagus.
Bastien Léonard

Ok, Anda telah meyakinkan saya, saya akan mencoba setup Anda sekali :-)
zvrba

1
Pernyataan gabungan bersarang adalah herring merah. Karena semua lekukan terdiri dari spasi, lekukan akan berbaris terlepas dari lebar karakter lainnya.
jwg

27

Saya heran mengapa tidak ada yang menyebutkan paket Minted . Ini memiliki penyorotan sintaks yang jauh lebih baik daripada paket daftar LaTeX. Ini menggunakan Pygments .

$ pip install Pygments

Contoh di LaTeX:

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

Yang mengakibatkan:

masukkan deskripsi gambar di sini

Anda perlu menggunakan flag -shell-escapedengan perintah pdflatex.

Untuk informasi lebih lanjut: https://www.sharelatex.com/learn/Code_Highlighting_with_minted


2
+1. Minted adalah paket untuk kode sumber penyusunan huruf di LaTeX. Tidak hanya mudah digunakan, kaya fitur dan didokumentasikan dengan baik, tetapi juga tidak memiliki masalah dengan karakter Unicode dalam kode sumber (tidak seperti listings).
ScumCoder

Ya ampun! Jauh lebih baik! Terima kasih banyak atas sarannya.
Dmitry Zotikov

21

Selamat mencoba listingspaketnya. Berikut adalah contoh dari apa yang saya gunakan beberapa waktu lalu untuk memiliki daftar Java berwarna:

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

Anda mungkin ingin menyesuaikannya. Ada beberapa referensi dari paket listing. Hanya google mereka.


Terima kasih. Saya masih mengetahui paket cantuman, tetapi tidak dapat memformat seperti sampel saya. Ini pertanyaan sesungguhnya.
Mork0075

9

Lihatlah algorithmspaket, terutama algorithmlingkungan.


1
Terima kasih. Paket ini tampaknya sangat kuat dalam diskusi algirthm yang lebih teoretis, saya tahu itu dari banyak buku matematika. Tetapi saya tidak akan terlalu menekankan hal ini (prerequsit, jika, yang lain), saya ingin memiliki format seperti yang di atas.
Mork0075

4
Saya hanya berbicara tentang algorithmlingkungan, bukan algorithmic. algorithmadalah wadah mengambang, yang terlihat cukup bagus. Anda dapat memasukkan apa pun yang Anda suka di dalam, bahkan listingelsethread yang disebutkan.
avakar

8

Ada beberapa hal lain yang dapat Anda lakukan, seperti memilih font baru:

\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
Saya percaya bahwa dalam \ gaya kata kunci dan \ tabsi garis miring terbalik harus dihapus karena tidak akan bekerja dengan cara ini. Meskipun demikian sangat membantu!
Xiphias

2

Untuk kode R saya gunakan

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

Dan terlihat persis seperti ini

masukkan deskripsi gambar di sini

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.