Inserimento di codice in questo documento LaTeX con rientro


427

Come inserisco il codice in un documento LaTeX? C'è qualcosa come:

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

L'unica cosa di cui ho veramente bisogno è il rientro e un carattere a larghezza fissa. L'evidenziazione della sintassi potrebbe essere piacevole anche se sicuramente non è richiesta.


Non un duplicato esatto, ma le risposte coprono lo stesso motivo: vedi stackoverflow.com/questions/741985/…
Charles Stewart,

Ho anche un follow-up domanda qui: stackoverflow.com/questions/3408996/...
sixtyfootersdude

Risposte:


631

Usa il listingspacchetto.

Configurazione semplice per l'intestazione LaTeX (prima \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
}

È possibile modificare la lingua predefinita nel mezzo del documento con \lstset{language=Java}.

Esempio di utilizzo nel documento:

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

Ecco il risultato:

Immagine di esempio


3
Ho una domanda di follow-up relativa al tuo codice. Date un'occhiata se si ha la possibilità: stackoverflow.com/questions/3408996/...
sixtyfootersdude

1
C'è un modo per ridurre lo spazio tra le righe di codice?
sukhvir,

È possibile aggiungere un piccolo testo sotto lo snippet di codice, simile al testo scritto sotto una figura in Latex?
Brian J,

@Brian Non ne sono consapevole. Forse avere il codice all'interno di a figurepotrebbe ottenere l'effetto.
Cloudanger,

Ho sentito che questo pacchetto è ormai obsoleto!
xxx ---

165

È inoltre possibile utilizzare l'ambiente testuale

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

57
Si è verificato un problema con l'utilizzo delle schede all'interno dell'ambiente testuale. Se le schede vengono convertite in "spazio", il problema scompare.
Midtiby

1
Questo è utile per mostrare contenuti di file di testo di esempio (ad es. Dati testuali che devono essere letti / elaborati da un programma).
nalyd88,

Per l'articolo a due colonne, non gestisce bene i margini.
Sazzad Hissain Khan,

115

Ecco come aggiungere il codice incorporato:

È possibile aggiungere il codice inline con {\tt code }o \texttt{ code }. Se vuoi formattare il codice inline, sarebbe meglio fare il tuo comando

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

Inoltre, si noti che i blocchi di codice possono essere caricati da altri file con

\lstinputlisting[breaklines]{source.c}

breaklinesnon è richiesto, ma lo trovo utile. Tieni presente che dovrai specificare \usepackage{ elenchi } per questo.

Aggiornamento: il pacchetto di elenchi include anche il \lstinlinecomando, che ha le stesse funzioni di evidenziazione della sintassi dei comandi \lstlistinge \lstinputlisting(vedere la risposta di Cloudanger per i dettagli di configurazione). Come menzionato in alcune altre risposte, c'è anche il pacchetto coniato, che fornisce il \mintinlinecomando. Ad esempio \lstinline, \mintinlinefornisce la stessa evidenziazione della sintassi di un normale blocco di codice coniato:

\documentclass{article}

\usepackage{minted}

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

1
è un modo migliore per il codice inline che attiva i colori delle parole chiave ecc.?
nano,

Sì. Ho aggiornato la mia risposta per discuterne.
Alan,

come si inseriscono spazi / tab per renderlo più leggibile?
Charlie Parker,

32

Pacchetti specializzati come minted, che si basano su Pygments per eseguire la formattazione, offrono vari vantaggi rispetto al listingspacchetto. Per citare dal mintedmanuale,

Pygments offre un'evidenziazione della sintassi di gran lunga superiore rispetto ai pacchetti convenzionali. Ad esempio, gli elenchi in sostanza evidenziano solo stringhe, commenti e parole chiave. I pigmenti, d'altra parte, possono essere completamente personalizzati per evidenziare qualsiasi tipo di token che la lingua di origine potrebbe supportare. Ciò potrebbe includere sequenze di formattazione speciali all'interno di stringhe, numeri, diversi tipi di identificatori e costrutti esotici come tag HTML.


1
Ho provato coniato, la documentazione è abbastanza semplice. Lo stile predefinito è abbastanza buono.
user2262504

5
Questa potrebbe essere una soluzione insoddisfacente per molti utenti, a causa della chiamata esterna richiesta a Pygmentsic. In particolare, l'obbligo di chiamare il lattice con la -shell-escapedirettiva è, nella migliore delle ipotesi, una modifica minore ai sistemi di compilazione esistenti e, nel peggiore dei casi, incompatibile con le preferenze di sicurezza di alcuni utenti.
KDN

12

Usa menta .

È un pacchetto che facilita l'evidenziazione della sintassi espressiva in LaTeX usando la potente libreria Pygments . Il pacchetto fornisce anche opzioni per personalizzare l'output del codice sorgente evidenziato usando fancyvrb .

È molto più evoluto e personalizzabile rispetto a qualsiasi altro pacchetto!


Tuttavia, come già accennato in una risposta simile, -shell-escapepotrebbe far schifo per alcune persone.
Egor Hans,

8

Opere di menta in Overleaf , TeX Live e MiKTeX.

Esempio:

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

Produzione:

inserisci qui la descrizione dell'immagine


6

Dato che non è stato ancora menzionato qui, potrebbe valere la pena aggiungere un'altra opzione, pacchetto spverbatim(senza evidenziazione della sintassi):

\documentclass{article}
\usepackage{spverbatim}

\begin{document}

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

\end{document}

Inoltre, se non è necessario evidenziare la sintassi, pacchetto alltt:

\documentclass{article}
\usepackage{alltt}

\begin{document}

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

\end{document}

1
Questo è più o meno quello che voglio, ma non riesco a rientrare con le schede. Come si rientra / esiste un pacchetto simile che consente un rientro più semplice?
Darokrithia,

1
@Darokrithia Ho modificato la mia risposta: puoi controllare / affrontare il rientro? :)
MattAllegro,

1
Non sembra funzionare. Posso inviarti il ​​codice che sto usando, ma la formattazione viene distrutta nei commenti. A proposito ho usato una risposta diversa e ha funzionato bene, ma penso che questo dovrebbe essere risolto per i futuri lettori.
Darokrithia,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.