はじめに
latex, ソースコード というキーワードで検索上位に出てくるこの記事は7年も前のものです。
この方法で和英数記号混じりのソースコードを、lstlistingやlstinputlistingを使ってuplatexで組版すると、組版結果が崩れます。
元記事で注意されているにもかかわらず、記事通りに組版を試みて、酷い組版になっている例(学生のレポート)をよく目にします。生成AIサービスも listings を使えばOKみたいなことを返すようですが、特に学生諸氏におかれましては、くれぐれも真に受けないでください。
正しい方法
まず以下のリンクから plistings.sty をダウンロードし、texファイルと同じフォルダに入れてください。
- リンクをクリックする
- ファイルリストから plistings.sty をクリックする
- ファイル plistings.sty が表示されるので、やや右上にあるダウンロードアイコンをクリックする

この左から3番目、下向き矢印が書かれているものです。これ分からない人が意外と多いようです - ファイルがダウンロードされるので、texファイルと同じフォルダに入れる
そして、usepackage で plistings パッケージを読み込んだうえで、lstlisting 環境や lstinputlisting 命令を使ってください。
サンプルファイル
サンプルを示します。オプションは、元記事と同じものを使っています。(元記事のコメントスタイルに誤りがあったので修正しました)
- ソースコードは等幅フォント
- 左側に行数を表示
- キャプションはソースコードの上
- キャプションは「ソースコードn」(n=1,2,3…)
- キャプションの下とソースコード最終行の次に線を引く
\documentclass[uplatex,dvipdfmx]{jsarticle}
% 以下の2つのパッケージを入れておくと
% 他のパッケージがあるとき listings系の命令が起こすエラーを回避しやすい
\usepackage[T1]{fontenc}
\usepackage{lmodern}
% かならずtexファイルと同じところに plistings.sty を置く
\usepackage{plistings}
% 以下、listings系のオプションの事前設定
\lstset{
basicstyle={\ttfamily},
identifierstyle={\small},
commentstyle={\small}, % 日本語は \itshape が効かないので修正
keywordstyle={\small\bfseries},
ndkeywordstyle={\small},
stringstyle={\small\ttfamily},
frame={tb},
breaklines=true,
columns=[l]{fullflexible},
numbers=left,
xrightmargin=0zw,
xleftmargin=3zw,
numberstyle={\scriptsize},
stepnumber=1,
numbersep=1zw,
lineskip=-0.5ex
}
% 事前設定ここまで
\begin{document}
123 Hello を出力するプログラムを,ソースコード\ref{test1}に示す.
\begin{lstlisting}[language=C,caption=123\_hello.c,label=test1]
#include<stdio.h>
int main(){
/* 標準出力に123 Helloと出力して改行する */
printf("123 Hello\n");
/* プログラムを0を返して終了する */
return 0;
}
\end{lstlisting}
用意したサンプルファイルを、ソースコード \ref{test2}として示す。
\lstinputlisting[language=C,caption=sample.c,label=test2]{sample.c}
\end{document}
/* ソースコード */
#include<stdio.h>
#include<stdlib.h>
int main (int ac, char *av[]) {
/* 標準出力に1:Hello,World.と出力して改行 */
printf("1:Hello,World.\n");
/* 標準エラー出力に2:Error World.と出力して改行 */
fprintf(stderr, "2:Error World.\n");
return EXIT_SUCCESS;
}
※意図的に文字種を混在させています。
組版結果は以下のようになります。
CloudLaTeX にサンプルを公開してみました。この記事に掲載していない、fvextra パッケージで \VerbatimInput 命令を使う場合についても例を示しています。
Markdownなどをそのまま組版したいときは、こちらがおすすめです。
補足
貼り付けようとしているソースコードに和英数字記号交じりの文が含まれている場合、uplatexで組版を行うと、旧来の方法(listings, jvlistingパッケージを使う方法)では正しく組版できません。
\documentclass[uplatex,dvipdfmx]{jsarticle}
% plistings を用いない場合
\usepackage{listings,jvlisting}
% 以下同じ
数字や記号の位置が、日本語の文字と入れ替わってしまい、組版が崩れてしまいます。
lualatexを用いた場合は、このような現象は起きないそうです。
また、古い記事ですと jlisting.sty をダウンロードして使うとよい、みたいなことが残っているようですが、おすすめしません。事情については以下の記事を参照ください。

