1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本語LaTeX文書に和英数記号混じりのソースコードを【正しく】貼る方法

1
Last updated at Posted at 2026-01-28

はじめに

latex, ソースコード というキーワードで検索上位に出てくるこの記事は7年も前のものです。

この方法で和英数記号混じりのソースコードを、lstlistingやlstinputlistingを使ってuplatexで組版すると、組版結果が崩れます。
元記事で注意されているにもかかわらず、記事通りに組版を試みて、酷い組版になっている例(学生のレポート)をよく目にします。生成AIサービスも listings を使えばOKみたいなことを返すようですが、特に学生諸氏におかれましては、くれぐれも真に受けないでください。

正しい方法

まず以下のリンクから plistings.sty をダウンロードし、texファイルと同じフォルダに入れてください。

  1. リンクをクリックする
  2. ファイルリストから plistings.sty をクリックする
  3. ファイル plistings.sty が表示されるので、やや右上にあるダウンロードアイコンをクリックする 
    ghdl.png
    この左から3番目、下向き矢印が書かれているものです。これ分からない人が意外と多いようです
  4. ファイルがダウンロードされるので、texファイルと同じフォルダに入れる

そして、usepackage で plistings パッケージを読み込んだうえで、lstlisting 環境や lstinputlisting 命令を使ってください。

サンプルファイル

サンプルを示します。オプションは、元記事と同じものを使っています。(元記事のコメントスタイルに誤りがあったので修正しました)

  • ソースコードは等幅フォント
  • 左側に行数を表示
  • キャプションはソースコードの上
  • キャプションは「ソースコードn」(n=1,2,3…)
  • キャプションの下とソースコード最終行の次に線を引く
sample1.tex
\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}
sample.c
/* ソースコード */
#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;
}

※意図的に文字種を混在させています。

組版結果は以下のようになります。

image.png

CloudLaTeX にサンプルを公開してみました。この記事に掲載していない、fvextra パッケージで \VerbatimInput 命令を使う場合についても例を示しています。
Markdownなどをそのまま組版したいときは、こちらがおすすめです。

補足

貼り付けようとしているソースコードに和英数字記号交じりの文が含まれている場合、uplatexで組版を行うと、旧来の方法(listings, jvlistingパッケージを使う方法)では正しく組版できません。

sample2.tex
\documentclass[uplatex,dvipdfmx]{jsarticle}
% plistings を用いない場合
\usepackage{listings,jvlisting} 
% 以下同じ

wrongjplistings.png

数字や記号の位置が、日本語の文字と入れ替わってしまい、組版が崩れてしまいます。
lualatexを用いた場合は、このような現象は起きないそうです。

また、古い記事ですと jlisting.sty をダウンロードして使うとよい、みたいなことが残っているようですが、おすすめしません。事情については以下の記事を参照ください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?