4. レポート / LaTeX

このページではLaTeXを用いたレポート作成方法についてまとめている.

※コマンド例の先頭に書かれている $ はプロンプトである.自身で入力する必要はない.

4.1. LaTeXを用いた文書作成(簡易版)

注釈

2019年現在においては,LaTeXのソースファイル (.tex) は,UTF-8 という文字コードで作成することが望ましい. Windowsの一般的な設定では,文字コード Shift_JIS で作成されることが多い.自習の際には注意しよう.

4.1.1. LaTeXソースファイルからPDFファイルの作成

$ edu-uplatex ファイル名.tex

※演習室専用のコマンドである.自習環境では,次の詳細版を読むか,本ページ下方の Appendix を見よ.

4.1.2. PDFファイルのプレビュー

$ evince ファイル名.pdf

4.2. LaTeXを用いた文書作成(詳細版)

4.2.1. LaTeXソースファイルからDVIファイルの作成

$ uplatex ファイル名.tex
$ uplatex ファイル名.tex

作成の初期段階や最終段階においては,uplatex コマンドを最低2回は実行する必要がある.(理由は,本ページ下方の FAQ を見よ.)

エラーが発生した場合で,エラーモードを終了するには x を入力すればよい.

4.2.2. DVIファイルからPDFファイルの作成

$ dvipdfmx ファイル名.dvi

dvipdfmx コマンドには,拡張子 .dvi のファイルを与えている点に注意.

警告

Windows環境(非WSL2環境)で実施している場合は,PDFファイルを閉じてから,dvipdfmx コマンドを実行しよう. Windowsでよく使われる Acrobat Reader によるPDFファイル閲覧中は,PDFファイルを書き換えることができない.

4.2.3. PDFファイルのプレビュー(詳細版)

$ evince ファイル名.pdf

あるいは

$ qpdfview ファイル名.pdf

4.3. LaTeX処理中のエラー

TeX Wikiを参照し,検索するとよい. ほとんどのウェブブラウザで,Ctrl + f により,ページ内検索が可能である.

4.4. LaTeX処理中に気を付けるべき警告メッセージ

PDFファイルができているからと言って油断してはならない. uplatex による2回目の処理においても,以下のようなメッセージが表示されているのであれば,適切に修正すること.

  • LaTeX Warning: Reference 'tab:structure_person' on page 2 undefined on input line 87.

    • このままでは参照している箇所で「表?」や「図?」が表示される.

    • メッセージの on input lines で指示されている行(上例なら 87 行目)において, \ref 等を用いて引用されているラベル(上例なら tab:structure_person)が, 他の行で書いた図や表などの \label と異なっていないか,確認しよう.

  • Overfull hbox (101.25104pt too wide) in paragraph at lines 655--655

    • このままでは,余白にはみ出して組版されてしまい,場合によっては余白にすら収まらない可能性がある.

    • メッセージの at lines で指示されている行(上例なら 655 行目)を確認しよう.

    • なお,verbatim 環境の場合,環境が終わる行のみが示される.

      • メッセージの次の行にtexソースコードの1行が表示されているはず.その内容を探しだして,確認しよう.

    • 本文中の記述に現れる場合は,下方の FAQ を参照せよ.

  • ### simple group (level 1) entered at line 39 ({)

    • 開き中括弧(ブレース; {)に対応する閉じ中括弧(})が足りていない場合に発生する.

    • 文字サイズの変更や行間の変更コマンドの対象が崩れている可能性がある

    • メッセージの at lines で指示されている行(上例なら 39 行目)の周辺を注意深く確認しよう.

ヒント:定型メッセージを探し出すなら grepコマンド が便利である. 拡張子 .log のファイルから上記のようなメッセージを探し出してみよう.

4.5. 表の挿入

リスト 6 表の挿入の例
 1\begin{table}[b] \centering
 2    \caption{CSV入力形式の各行における項目}
 3    \label{tab:line-element}
 4    \begin{tabular}{l|ll}
 5        \hline
 6        \textbf{項目} & \textbf{データの種類} & \textbf{CSV入力時の制約} \\
 7        \hline\hline
 8        \textbf{ID}   & 数値                  & 32~bitで表現可能な整数 \\
 9        \textbf{氏名} & 文字列                & 最大100文字 \\
10        \textbf{備考} & 文字列                & 任意長 \\
11        \hline
12    \end{tabular}
13\end{table}
14
15CSV入力形式の,各行における項目には,表\ref{tab:line-element}のような意味と制約が与えられている.
  • 表環境の準備 \begin{table}[b]\end{table}

    • オプションは,top, bottom のいずれか.page を追加しても良い.here もあるが,原則利用しない.

  • 表組書式の準備 \begin{tabular}{}\end{tabular}

    • オプションは中カッコで書くことに注意.

      • 列数と同じだけ,left, rright, center のいずれかを書く.

      • 列間に縦棒を入れたい場合は,| を入れる.

    • 行内で,項目間は & で区切り,最後は \\ とする.

    • 行間に横棒を入れたい場合は,\hline を入れる.

    • 見出し相当の項目は \textbf で太字にすると,読みやすい.

  • 表のキャプション \caption{}.表の場合は,必ず に書く.

  • 画像への参照ラベル \label{}

    • labelはキャプションの に配置しないと,番号がずれる.

  • 本文における画像の参照 \ref{}

4.6. 画像の挿入(graphicxパッケージ)

texソースコードのプレアンブル(\begin{document} より前)に,以下の1行を挿入する必要がある.

1\usepackage[dvipdfmx]{graphicx}

演習室の環境では,カギカッコで与えるオプションは,例のように dvipdfmx とすればよい. 他の環境ではオプションを変える必要がある場合もある点には注意が必要である. (同オプションを与えない場合,jpg, png, pdf などの挿入時に bb (boundinx box) の明示的な指定が必要となってしまう.)

  • 画像環境の準備 \begin{figure}[t]\end{figure}

    • オプションは,top, bottom のいずれか.page を追加しても良い.here もあるが,原則利用しない.

  • 画像の挿入 \includegraphics[]{}

    • オプションとしてよく使うものを抜粋する

    • scale= 比率で拡大/縮小する.例えば,scale=1.2 とした場合,画像は1.2倍の大きさになる.

    • width= 幅の指定.例えば,.5\textwidth なら,テキスト部分の幅(\textwidth)の 0.5 倍に拡大/縮小される.

    • bb=x1 y1 x2 y2 Bounding boxの指定.一部の画像ファイルにおいては,このオプションで画像ファイルの大きさを指示する必要がある.(x1, y1) を画像の左下座標,(x2, y2) を画像の右上座標とする.

    • clip Bounding boxの大きさで「切り抜き」される.例えば,[clip, bb=0 0 100 200] とすれば,左下座標0,0(原点)から,右上座標100,200までの画像が埋め込まれる.

  • 画像のキャプション \caption{}.図の場合は,必ず に書く.

  • 画像への参照ラベル \label{}

    • labelはキャプションの に配置しないと,番号がずれる.

  • 本文における画像の参照 \ref{}

リスト 7 図の挿入の例
1\begin{figure}[t]
2    \centering
3    \includegraphics[clip, width=.5\textwidth]{pano0.png}
4    \caption{パノラマ画像の例}
5    \label{fig:pano0}
6\end{figure}
7
8ここで,パノラマ画像の例を,図\ref{fig:pano0}に示す.
includegraphics では,ファイル名に拡張子以外のドットを含む場合,エラーになる場合がある.
  • 例えば, pano.0.png というファイル名はエラーとなる.

  • このような場合は pano0.pngpano_0.png などのファイル名を検討する.

4.7. 高度な図表の挿入 (minipage, subcaptionパッケージ, etc.)

複数の図や表を横に並べて配置したい場合など,より高度な図表の挿入方法については,以下を参照されたい.

リスト 8 図の挿入の例2
 1% PREAMBLE の graphicx 付近に以下を追加
 2% 設定:図の挿入
 3% http://edu2024.sp.cs.okayama-u.ac.jp/info/tool_guide/tex.html#graphicx
 4\usepackage{graphicx}
 5% https://ctan.org/pkg/subcaption
 6\usepackage[labelformat=simple]{subcaption}
 7\renewcommand\thesubfigure{(\alph{subfigure})}
 8
 9% subcaption パッケージと minipage 環境を使って図を並べる例
10% - https://ctan.org/pkg/subcaption
11% - minipage は2つ目の引数で幅を指定する.
12%   + ".49\columnwidth" とは 0.49 x \columnwidth の意味.つまり,ページ幅の49%の長さ.
13%   + 合計して1.0\columnwidth以下にするか,\end{minipage}の後にコメント(%)を入れる.
14%     (行末でコメントにすることで改行コード=LaTeXでは半角スペースと等価,の挿入を防ぐ)
15\begin{figure}[btp] %{{------------ FIGURE -------------------------------------
16\centering  % この centering は figure内の 2つの minipage を中央に寄せるため
17  \begin{minipage}[t]{.49\columnwidth}
18  \centering                  % この centering は minipage内の図を中央に寄せるため
19    \includegraphics[clip,width=\columnwidth]{Example-AI-graph1.png}
20    \subcaption{例2-1}        % caption ではなく subcaption である点に注意
21  \label{fig:example_of_figure2_1}
22  \end{minipage}%
23  %\hspace{.1\columnwidth}    % minipage同士の間に余白を入れることもある
24  %\hfill                     % minipage同士の間の余白を自動調整
25  \begin{minipage}[t]{.49\columnwidth}
26    \centering                % この centering は minipage内の図を中央に寄せるため
27    \includegraphics[clip,width=\columnwidth]{Example-AI-graph2.png}
28    \subcaption{例2-2}        % caption ではなく subcaption である点に注意
29  \label{fig:example_of_figure2_2}
30  \end{minipage}
31  \caption{figure環境の例2}
32  \label{fig:example_of_figure2}
33\end{figure} %---------------------- FIGURE ----------------------------------}}
34
35図表は本文で引用しよう.
36例えば,図\ref{fig:example_of_figure2}のように.
37あるいは,図\ref{fig:example_of_figure2_1},図\ref{fig:example_of_figure2_2}
38のように,個別に参照するのも良い.
39% subcaption パッケージを使うと,(a), (b) のように小文字のアルファベットで
40% 図を区別できる.
../_images/tex-example-fig2.png

図 3 図の挿入の例2の生成例.元の図は人工知能実験(担当:原)の図を利用した.

4.8. ソースコードの挿入

基本的には,標準で利用できる verbatim 環境でも事足りることは多い. 行数の自動表示などをしたいのであれば,より便利なパッケージも多数存在する.

4.8.1. ソースコードの挿入(verbatim環境)

verbatim 環境で行数の多いソースコードを書くと,やや見苦しい.

そこで,以下の snippet を利用するとよい.

リスト 9 標準パッケージのみでソースコードを記載する例
 1\bgroup \fontsize{10pt}{11pt} \selectfont
 2\begin{verbatim}
 3#include <stdio.h>
 4
 5int main()
 6{
 7    char s[4] = {'A', 'B', 'C', '\0'};
 8
 9    printf("s = %s\n", s);
10
11    return 0;
12}
13\end{verbatim}
14\egroup

ここで, \fontsize\selectfont によりフォントと行間を変更する指令を加えている. この指令には,範囲指定が必要であるため, \bgroup\egroup で囲っている.

フォント指定を含め,正しく書けていれば,図 4 のような見た目となる.

../_images/tex-verbatim-ok.png

図 4 正しいフォント指定

../_images/tex-verbatim-ng1.png

図 5 失敗例1

../_images/tex-verbatim-ng2.png

図 6 失敗例2

注意点として,よくある失敗例を示す.

  • グループの閉じ記号(\egroup)を忘れてはならない.

    • 閉じ記号を忘れると,図 5 のように,以降の本文すべてに対してフォント・行間の変更が適用されてしまう

    • 閉じ記号を忘れたとしても,前述の simple group (level 1) entered at line xxx のような警告が発生するだけで, 作成が中断されるわけではない

    • グループは波かっこで囲って指定することもできるが, bgroup/egroup を使った方が見落としにくい.

  • \end{verbatim} は,行の先頭に書き,不要な空白を入れない.

    • 空白を入れると,図 6 のように,verbatimの後に不要な空行が入ってしまう

4.8.2. ソースコードの挿入(fvextra パッケージ)

標準で利用できる verbatim 環境を利用しても良いが,より便利なパッケージも多数存在する. ここでは,そのうちの一つとして,fvextra パッケージ を紹介する.

注釈

Ubuntu (WSL2) で fvextra パッケージを利用するには,事前に apttexlive-latex-extra をインストールするか, tlmgr を使用してインストールする必要がある. fancyvrb パッケージ でよいならば, apttexlive-latex-recommended がインストールされていればよい. いずれにせよ,自習環境構築ページで解説しているので,そちらを参照されたい.

fvextra パッケージを利用するためには,まず, texソースコードのプレアンブル(\begin{document} より前)に,以下の行を挿入する必要がある. 2行目は行番号の表示を整えるための設定である.

1 \usepackage{fvextra}
2 \renewcommand{\theFancyVerbLine}{\texttt{\footnotesize{\arabic{FancyVerbLine}:}}}
3 \fvset{breaklines=true, breakanywhere=true}  % fvextraが必要.fancyvrbではエラーになる.

fvextra パッケージでよく使うのは,verbatim 環境をより便利にした,Verbatim 環境であろう. (V が大文字であることに注意.標準では,小文字の v である.) ソースコードを表示する際に,枠で囲んだり,自動で行番号を付与したりすることができる. ただし,行の途中で自動改行はされないため,長い行は手動で改行を入れておく必要がある. なるべく,枠で囲う (frame=single) ようにすることで,はみだし (Overfull hbox) に気づきやすくなる.

利用例をいくつか紹介する. リスト 10 は,行番号付きでソースコードを記載する例である. リスト 11 は,より高度で,figure環境内にCSV風のテキストを記載する場合の例である. リスト 12 は,先頭の空白を無視して表示する方法であり,インデントされたテキストをコピペした際に役だつ. ただし,gobble オプションは,必要な空白まで誤って消してしまうことがあるため,注意して利用する必要がある. latex-example-fancyvrb4 は,外部のテキストファイルを読み込んで表示するための方法である. 自動で折り返しもされるため,長い行がはみ出す心配はない. ただし,長い行を書いている場合は,そもそもの書き方が適切ではない可能性があるため,あまり頼り切らないほうが良い.

リスト 10 行番号付きでソースコードを記載する例
 1% Verbatim environment
 2% プリアンブルで \usepackage{fvextra} が必要.
 3%   - numbers           行番号を表示.left なら左に表示.
 4%   - xleftmargin       枠の左の余白.行番号表示用に余白を与えたい.
 5%   - numbersep         行番号と枠の間隙 (gap).デフォルトは 12 pt.
 6%   - fontsize          フォントサイズ指定
 7%   - baselinestretch   行間の大きさを比率で指定.デフォルトは 1.0.
 8\begin{Verbatim}[numbers=left, xleftmargin=10mm, numbersep=6pt,
 9                    fontsize=\small, baselinestretch=0.8]
10#include <stdio.h>
11
12int main()
13{
14    char s[4] = {'A', 'B', 'C', '\0'};
15
16    printf("s = %s\n", s);
17
18    return 0;
19}
20\end{Verbatim}
リスト 11 figure環境内で四角枠で囲ったverbatim環境風のテキストを記載する例
 1%========================= EXAMPLE CSV ================================%
 2\begin{figure}[b] \centering
 3% Verbatim environment
 4% プリアンブルで \usepackage{fvextra} が必要.
 5%   - frame         枠の設定.noneは無し.single は四角.
 6%   - xleftmargin   枠の左の余白
 7%   - xrightmargin  枠の右の余白
 8%   - gobble        先頭 n 文字を無視.!!必要な文字まで誤って消さないように注意!!
 9%   - fontsize      フォントサイズ指定
10%   - numbers       行番号を表示.left なら左に表示.
11%   - firstnumber   最初の行番号を指定
12\begin{Verbatim}[frame=single, xleftmargin=5mm, xrightmargin=5mm,
13                fontsize=\small, numbers=left, firstnumber=1]
145100046,The Bridge,1845-11-2,14 Seafield Road Longman Inverness,SEN Unit 2.0 Open
155100127,Bower Primary School,1908-1-19,Bowermadden Bower Caithness,01955 641225 ...
165100224,Canisbay Primary School,1928-7-5,Canisbay Wick,01955 611337 Primary 56 3...
175100321,Castletown Primary School,1913-11-4,Castletown Thurso,01847 821256 01847...
18\end{Verbatim}
19    \caption{名簿データのCSV入力形式の例.1行におさまらないデータは...で省略した.}
20    \label{fig:csvdata}
21\end{figure}
22%========================= EXAMPLE CSV ================================%
リスト 12 figure環境内で四角枠で囲ったverbatim環境風のテキストを記載する例(gobbleで先頭の空白を無視する例)
 1%========================= EXAMPLE CSV ================================%
 2\begin{figure}[b] \centering
 3% Verbatim environment
 4% プリアンブルで \usepackage{fvextra} が必要.
 5%   - frame         枠の設定.noneは無し.single は四角.
 6%   - xleftmargin   枠の左の余白
 7%   - xrightmargin  枠の右の余白
 8%   - gobble        先頭 n 文字を無視.!!必要な文字まで誤って消さないように注意!!
 9%   - fontsize      フォントサイズ指定
10%   - numbers       行番号を表示.left なら左に表示.
11%   - firstnumber   最初の行番号を指定
12\begin{Verbatim}[frame=single, xleftmargin=5mm, xrightmargin=5mm,
13                 gobble=4,
14                 fontsize=\small, numbers=left, firstnumber=1]
15    5100046,The Bridge,1845-11-2,14 Seafield Road Longman Inverness,SEN Unit 2.0 Open
16    5100127,Bower Primary School,1908-1-19,Bowermadden Bower Caithness,01955 641225 ...
17    5100224,Canisbay Primary School,1928-7-5,Canisbay Wick,01955 611337 Primary 56 3...
18    5100321,Castletown Primary School,1913-11-4,Castletown Thurso,01847 821256 01847...
19\end{Verbatim}
20    \caption{名簿データのCSV入力形式の例.1行におさまらないデータは...で省略した.}
21    \label{fig:csvdata}
22\end{figure}
23% ↑の例では,CSVデータの先頭に4文字の半角スペースが入っている点に注意.gobbleで無視している.
24%========================= EXAMPLE CSV ================================%

4.9. コメント文

% から改行コードまでの範囲はコメントとして扱われる.

リスト 13 LaTeXで複数行のコメントアウトの例(1)
1% パーセントを先頭に書けば,その1行がすべてコメント文である
2
3パーセントから後ろがコメントなので,     % ここから右はコメント
4こういう書き方で,地の文とコメント文を   % ここから右もコメント
5書くこともできる.                     % もちろんここから右もコメント

複数行をコメントアウトしたい場合は, \if0\fi で囲めばよい.

リスト 14 LaTeXで複数行のコメントアウトの例(1)
1ここはコメントの外.
2\if0
3ここはコメントの中
4\fi
5ここはコメントの外.

あるいは, comment.sty をインストールしているならば,comment 環境を使うこともできる. Ubuntu on WSL2 では,apt install の際に texlive-latex-extra,あるいは, texlive-latex-full も指定してインストールしていれば,特に追加作業なく利用できる.

特定の .tex ファイルで使いたいだけならば,上記リンク先の comment.sty ファイルを wget コマンドなどでダウンロードし,.tex ファイルと同じ場所に置けばよい.

4.10. 参考書

4.10.1. LaTeXを用いた文書作成の基礎

4.10.2. LaTeX全般

4.10.3. レポート全般

4.11. FAQ

►Q. LaTeXを書くときに使える指令や記号の一覧みたいなものはないか?

A. 検索で,cheat sheet というものを探してみるとよい.例えば,

なお,最近のLaTeXの実行環境であれば,

$ texdoc platexsheet

とコマンドを入力すると,標準的なcheet sheetの一つが表示されるようになっている. (ただし,TeX環境構築時に document をインストールしていないと,このコマンドは存在しない. 加えて,WSL2の場合は,GUI環境の構築も必要.)

►Q. uplatexdvipdfmx を使い分けるのが覚えられません.使い分けを気にしないで済むようなコマンドはありませんか?

A. 例えば,ptex2pdf コマンドがある.利用例は,例えば以下の通り.

$ ptex2pdf -l -u ファイル名.tex

ptex2pdf -l -u は,内部で uplatexdvipdfmx を呼び出している. 指定しているオプションは小文字のエルと小文字のユーである.

ただし,2回呼び出す必要がある点は変わらない事に注意しよう.

エディタのビルド機能を活用する場合は,こちらのコマンドの方が便利であろう.

►Q. なぜ uplatex コマンドは2回実行しないといけないのですか?

A. TeXの仕様である. 1回目の uplatex では,拡張子 .aux のファイルに \label\bib の一覧を作成する. 2回目以降の uplatex では,既存の拡張子 .aux のファイルを参照しながら,\ref\cite に数字を割り振る. なお,目次をつける場合も,同様に .aux ファイルが用いられている.

特に,ソースファイルを大きく修正した場合は注意しよう. 番号のずれが起こったり,「表?」,「図?」などの表示になってしまう. 「?」は .aux から引用すべきラベルが見つからなかったため,適切な数字を割り振ることができなかった際に用いられている. 2回処理しても「?」が残っている場合は,そもそもタイプミスをしていないか,確認しよう.

なお,勘のいい学生は気づいたかもしれないが,2回どころか何回実行しても駄目な場合が存在する. ただし,詳細はここでは述べない.

►Q. LaTeXで作成したファイルをEvinceでプレビューすると文字化けします.

A. Evinceで開くべきファイルの拡張子は .pdf である. 誤って,拡張子が .dvi のファイルを開いていないか,確認すること.

►Q. Shift_JISで作られたtexファイルからPDFファイルを作成したい.

A. uplatex ではなく,platex コマンドを使えばよい(u はUnicode版という意味).

platex では,文字コードを自動的に推定しているため,この問題はおこらないはずである.

platex でも,文字化けをしてしまう場合は,以下のコマンドによる作成を試してみるとよい.

$ platex --kanji=sjis ファイル名.tex

または,

$ ptex2pdf -l -ot --kanji=sjis ファイル名.tex

ここでは,--kanji オプションを使って,明示的に文字コード sjis を指定している.

なお,platex では,異体漢字でエラーが出る可能性がある.例えば,ハシゴダカの「髙」など.

►Q. LaTeXのコマンドを実行したはずなのにPDFが新しくならない.

A. まずは以下2点を確認してみること.

  • ソースファイルの指定が誤っていないか?

  • ディレクトリを間違えていないか?

ls -alt コマンドを使って,ソースファイルとPDFファイルの更新日付を確認してみるとよい. 正しく作成されているならば,PDFファイルはソースファイルよりも新しい日付のはずである.

►Q. 本文中で関数名等を書くために \verb|xxx|\texttt{xxx} を利用すると,関数名等の途中で改行されておらず,Overfull \hbox の警告が表示されてしまう.

A. 該当する段落を \begin{sloppypar}\end{sloppypar} で囲むとよい. 例えば,以下のサンプル内のコメント部分に注意して,該当環境コマンドの有無による表示の違いを確かめてみよ. このとき,コンパイル後の警告メッセージの変化にも注目しておくとよい.

1%\begin{sloppypar}     % <-- beginとendで段落を囲む.下方のコメント/コメントアウトも忘れずに.
2本演習では,外部からの入力データを計算機で扱える内部形式に変換して格納し,
3それらを\verb|void print_profile(struct profile *)|などの関数により操作する方法について学習する.
4具体的には,標準入力から与えられる名簿のCSVデータを
5C言語の構造体の配列\verb|struct profile profiles[]|に格納し,
6それらをソートして表示するプログラムを作成する.
7%\end{sloppypar}

なお,この環境を使うことで副作用も発生する.副作用にも十分な注意を払い, 場合によっては書き方そのものを考えなおすことも検討すること.

►Q. 自分の名前を書いた行で Package inputenc Error が発生しているようである.

A. TexLive2018以降の環境で,異字体などの常用外漢字(例えば,「立」の「﨑」や「ハシゴダカ」の「髙」など)を利用すると,発生するエラーである. 以下の手順で,異なる文書クラス等を利用することで,解消する可能性がある. ただし,該当箇所の修正が叶っても,別の箇所で不具合が発生する可能性もあるため,注意すること.

  1. LaTeXソース冒頭の documentclass の指定で, jarticlebxjsarticle に変更する(bxjsclsがインストールされていない場合は,ujarticle でもよい)

  2. コンパイルコマンドを platex から uplatex に変更する(演習室の場合,edu-platex ではなく,edu-uplatex を使う)

►Q. includegraphicsを使うとエラーが出ます.

A. まずはエラーメッセージを確認するようにしてください. そのうえで,見落としやすいミスとして,以下を確認してみてください.

  • プレアンブル(冒頭の記述)で,\usepackage[dvipdfmx]{graphicx} と書くべき場所を,\usepackage{graphicx} としていないか?

  • 挿入したい画像ファイル名が,pano.0.png のように,拡張子の前にドットを含んでいないか?

►Q. レポート添削を受けた際に,『フォントがおかしい』と言われた.どうすればよいか?

A. PDFファイル作成時に,フォントを埋め込んでいる/埋め込んでいない事で発生しているかもしれません. (いる/いない,のどちらが原因かは,指示をした人に尋ねてください.)

例えば,以下の方法で,dvipdfmx をつかえば,日本語フォントを埋め込んだPDFや,埋め込まないPDFを強制的に作れます. (ただし,利用しているTeXの種類やバージョンによっては使えない.)

なお,dviファイル作成時に uplatex ではなく,platex でコンパイルしている場合は, -f オプションで指定するファイルの接頭辞 uptex-ptex- として,指定してください.

# uplatex, フォント埋め込む
dvipdfmx -f uptex-ipa.map xxxxxxx.dvi

# uplatex, フォントを埋め込まない
dvipdfmx -f uptex-noEmbed.map xxxxxx.dvi

# 参考:埋め込めるフォントを確認する
kanji-config-updmap-sys --ja status
►Q. レポート添削を受けた際に,『(日本語)フォントを埋め込んでほしい』と言われた.どうすればよいか?

A. 演習室環境で作成しているのに,この指摘をされている場合は,担当教員に詳細を尋ねてください.

自習環境として Ubuntu on WSL2 を利用しており,そのバージョンが Ubuntu 20.04 の場合,この問題がおそらく発生しています. 2024年5月現在のデフォルトである Ubuntu 22.04 の TexLive 2023 では 「原ノ味フォント(haranoaji)」を埋め込みます. しかし,Ubuntu 20.04 の TexLive 2021 は,デフォルトでPDFに日本語フォントを埋め込んでくれません.

■ どういう問題?

フォントを埋め込んでいないPDFファイルは,ビューワーによって,見栄えが変化してしまいます. 適切なPDFビューワー(Adobe acrobat, evince, etc.)であれば,ほぼ問題ない見た目になることは多いです. しかし,どのような環境でも適切に読めるファイルのほうが,どちらかと言えば望ましい挙動です.

以下の 図 7 を見てください. レポートの本文としては,特別な指示がない限り,左図のように日本語も「明朝体」として見えていたほうが望ましいです.

../_images/tex-diff-pdffont.png

図 7 Windows 11 環境にて,Acrobat Pro 10 で閲覧した場合(左)と Edge で閲覧した場合(右)の見栄えの違い. 左図のように「明朝体」で書かれた本文が望ましい. 右図のように「本文すべてがゴシック体のように見えてしまう」ような事態はできるだけ避けたい.

例えば,↑のFAQ に従って dvipdfmx のオプション指定をつかえば, 日本語フォントを埋め込んだPDFや,埋め込まないPDFを強制的に作ることも可能です. また,自分でいろいろ調べて ipaipaex を埋め込むようにしているなら,それでも大きな問題はありません.

そうでないならば,常に日本語フォントを埋め込む設定にしておいたほうが無難です.

■ 解決方法は?

※注:以下は,演習室で実行するコマンドではありません!自習環境でのみ必要となりうる実行コマンドです!!

TexLiveに付属の kanji-config-updmap-sys コマンドを使って設定します. 利用例では,Ubuntu on WSL2 を想定して,sudo を最初につけています. ($ は,Ubuntuのプロンプトです.) Windowsに直接TexLiveをインストールした人は,sudo 無しでコマンドを実行してください.

  1. 設定の事前確認

    以下のコマンドの結果で,CURRENT familynoEmbed になっている場合,埋め込まない設定です. 以降の設定方法を行ってください.

    $ sudo kanji-config-updmap-sys status
    CURRENT family for ja: noEmbed (variant: <empty>)
    Standby family : haranoaji
    Standby family : ipa
    Standby family : ipaex
    
  2. 設定の変更

    2024年5月現在の演習室の環境と同じフォントを埋め込む設定にするならば:

    $ sudo kanji-config-updmap-sys haranoaji
    Setting up ... haranoaji for ja
    (中略)
      jaEmbed replacement string       : haranoaji (/etc/texmf/web2c/updmap.cfg)
    (中略)
    Transcript written on "/var/lib/texmf/web2c/updmap.log".
    updmap: Updating ls-R files.
    
  3. 設定の再確認

    CURRENT familyharanoaji になっていることを確認してください.

    $ sudo kanji-config-updmap-sys status
    CURRENT family for ja: haranoaji (variant: <empty>)
    Standby family : ipa
    Standby family : ipaex
    
  4. PDFを作成して,フォントを確認する

    PDF viewer で見るだけではなく,できれば,Firefox や Chrome に Drag and drop して,そちらでも確認してみてください.

    以下,いろいろなフォントを埋め込んだ(あるいは,埋め込まない)PDFの例を用意しました. ブラウザの複数タブで開いてみると,違いがなんとなく分かるかもしれません.

4.12. Appendix (付録)

4.12.1. edu-uplatex2pdf

※Linux専用です.Ubuntu on WSL2 でもOK.Windowsネイティブ版はありません.

upLaTeXとdvipdfmxを利用して,PDFを作成する,という一連の流れをスクリプト化したものです. 一部のWarningメッセージが見られる場合には,その旨を表示するようにしています.

演習室の環境では edu-uplatex というコマンドで実行できるようになっています.

インストール手順は以下の通りです. ※プログラミング演習1,2の db-sample のために行った手続きを思い出そう.

#
# Install edu-uplatex2pdf, or edu-uplatex
#
mkdir -p ~/.local/bin            # 実行コマンドを保存するディレクトリを作成
cd ~/.local/bin                  # 作成したディレクトリに移動(入る; cdする)
wget https://xxxx                # https://xxxxx には,本ページ下のほうのボックスを見て,
                                 # その右下にある view raw のリンクURLをコピーして貼り付ける.
chmod +x edu-uplatex2pdf         # 実行権限を与える
                                 # cf. プログラミング演習の db-sample のために行った手続き
mv edu-uplatex2pdf edu-uplatex   # (任意)演習室と同じコマンド名のほうがいいなら,名前を変える.
ls -al                           # edu-uplatex2pdf あるいは edu-uplatex に実行権限(x)があることを確認する
exit                             # 端末を閉じる