インデント付きのこのLaTeXドキュメントへのコードの挿入


427

LaTeXドキュメントにコードを挿入するにはどうすればよいですか?次のようなものはありますか:

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

私が本当に必要なのは、インデントと固定幅フォントだけです。必須ではありませんが、構文の強調表示は便利です。


完全に重複しているわけではありませんが、答えは同じ範囲をカバーしています。stackoverflow.com/ questions / 741985 /…を
Charles Stewart

私もここで質問フォローアップを持っている:stackoverflow.com/questions/3408996/...
sixtyfootersdude

回答:


631

listingsパッケージを使用します。

LaTeXヘッダーの簡単な構成(前\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
}

を使用して、ドキュメントの途中でデフォルトの言語を変更できます\lstset{language=Java}

ドキュメントでの使用例:

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

結果は次のとおりです。

画像の例


3
コードに関するフォローアップの質問があります。あなたはチャンスを得る場合を見てみましょう:stackoverflow.com/questions/3408996/...
sixtyfootersdude

1
コードの行間のスペースを減らす方法はありますか?
sukhvir 2014年

ラテックスの図の下に書かれたテキストのように、コードスニペットの下に小さなテキストを追加することは可能ですか?
ブライアンJ

@ブライアン私はそれに気づいていません。おそらく内部にコードがあるとfigure、効果が得られるでしょう。
Cloudanger、2015年

このパッケージは廃止されたと聞きました。
xxx ---

165

逐語的環境を使用することもできます

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

57
逐語的環境内でのタブの使用に問題があります。タブが「スペース」に変換される場合、問題は解消されます。
midtiby

1
これは、テキストファイルの内容の例を示すのに適しています(たとえば、プログラムによって読み取られる/処理されるテキストデータ)。
nalyd88 2016

2列の記事の場合、マージンはうまく処理されません。
Sazzad Hissain Khan、

115

インラインコードを追加する方法は次のとおりです。

{\tt code }またはでインラインコードを追加でき\texttt{ code }ます。インラインコードをフォーマットする場合は、独自のコマンドを作成することをお勧めします

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

また、コードブロックは他のファイルから

\lstinputlisting[breaklines]{source.c}

breaklines必須ではありませんが、便利だと思います。この\usepackage{ リストのリスト を指定する必要があることに注意してください}

更新:リストパッケージには、\lstinlineコマンドも含まれています。このコマンドには、\lstlistingおよび\lstinputlistingコマンドと同じ構文強調表示機能があります(構成の詳細については、Cloudangerの回答を参照してください)。他のいくつかの回答で述べたように、\mintinlineコマンドを提供するmintedパッケージもあります。のように\lstinline\mintinline通常のミントコードブロックと同じ構文の強調表示を提供します。

\documentclass{article}

\usepackage{minted}

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

1
キーワードの色などをアクティブにするインラインコードのより良い方法はありますか?
nano

はい。それらを議論するために私の答えを更新しました。
アラン

読みやすくするためにスペース/タブをどのように挿入しますか?
チャーリーパーカー

32

のような特殊なパッケージmintedは、Pygmentsを使用してフォーマットを行うため、listingsパッケージに比べてさまざまな利点があります。mintedマニュアルから引用すると、

Pygmentsは、従来のパッケージと比較してはるかに優れた構文強調表示を提供します。たとえば、リストは基本的に文字列、コメント、キーワードのみを強調表示します。一方、Pygmentsは完全にカスタマイズして、ソース言語がサポートする可能性のあるトークンの種類を強調表示できます。これには、文字列、数値、さまざまな種類の識別子、およびHTMLタグなどのエキゾチックコンストラクト内の特別なフォーマットシーケンスが含まれる場合があります。


1
私は細かく試してみましたが、ドキュメントは非常に単純です。デフォルトのスタイルはかなり良いです。
user2262504

5
これは、Pygmentsicに必要な外部呼び出しのため、多くのユーザーにとって満足のいくソリューションではない可能性があります。特に、この-shell-escapeディレクティブでlatexを呼び出す要件は、せいぜい、既存のビルドシステムに対するマイナーな変更であり、最悪の場合、一部のユーザーのセキュリティ設定と互換性がありません。
KDNの2017年

12

Mintedを使用します

これは、強力なPygmentsライブラリを使用してLaTeXで表現力のある構文の強調表示を容易にするパッケージです。パッケージには、fancyvrbを使用して強調表示されたソースコード出力をカスタマイズするオプションも用意されています。

他のどのパッケージよりもはるかに進化し、カスタマイズ可能です!


しかし、同様の答えですでに述べたように、-shell-escape一部の人にとっては嫌なことがあります。
エゴールハンス

8

ミントは、Overleaf、TeX Live、MiKTeXで動作します。

例:

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

出力:

ここに画像の説明を入力してください


6

ここではまだ触れられていないので、パッケージを1つ追加することをお勧めしますspverbatim(構文の強調表示なし)。

\documentclass{article}
\usepackage{spverbatim}

\begin{document}

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

\end{document}

また、構文の強調表示が不要な場合は、パッケージ化しますalltt

\documentclass{article}
\usepackage{alltt}

\begin{document}

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

\end{document}

1
これは多かれ少なかれ私が欲しいものですが、タブでインデントすることはできません。どのようにインデントしますか/簡単なインデントを可能にする同様のパッケージはありますか?
ダロクリチア2018

1
@Darokrithia私は私の答えを編集しました:インデントを確認/対抗できますか?:)
MattAllegro

1
動作しないようです。私が使用しているコードを送信することはできますが、書式設定はコメントで破棄されます。ところで、私は別の答えを使用しましたが、それはうまくいきましたが、これは将来の読者のためにまだ修正されるべきだと感じています。
ダロクリチア2018

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.