10
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

LaTeXで楽に見た目の良い課題レポートに仕上げろ

この記事はあくあたん工房 GWアドベントカレンダー2020の1日目の記事として書かれたものです。


💪 モチベーション

課題、LaTeXで書いてるってだけで満足してませんか?

僕でした...。

せっかくなら楽にいい感じの見た目に仕上げて提出しちゃいたい!ですよね!

✨ 目標

  • タイトルをいい感じにする
  • 問題文をいい感じにする
  • ソースコードをいい感じにする
  • ハイパーリンクをつけていい感じにする
  • 参考文献をいい感じにする
  • latexmkrcを書いて楽にコンパイルする

こんな感じに仕上げます。

範囲を選択_072.png

🙅 書いてないこと

  • LaTex環境の構築方法
  • 各エディタごとの設定

環境の作り方は分かりやすい記事があると思うのでそれを読んでほしい。
エディタは好きなエディタを使ったほうが執筆作業が捗ると思う。

💻 僕の環境

一応、僕の環境を書いておきます。

OS     | Manjaro 20.0 Lysia
Kernel | x86_64 Linux 4.19.118-1-MANJARO
TeX    | TeX Live 2019

✨ タイトルをいい感じにする

学籍番号、名前は忘れると点数つかないのは当たり前です。

\maketitle をカスタマイズしたを参考に。
\usepackage{mdframed}するのを忘れないように。

例えばこんな感じ。

範囲を選択_071.png

✨ 問題文をいい感じにする

課題提出では、解答だけ書けば良いのではなく、問題分もちゃんと書かないといけません。

[LaTeX] problem --- 「問題」と「解答」の記述を参考に。

落としてきたproblem.styの文字エンコードだけUTF-8にエンコードし直しておきましょう。

範囲を選択_068.png

✨ ソースコードをいい感じにする

可能な限りシンタックスハイライト付けた方が読みやすいです。

listings + jlisting

listingsの言語を追加するを参考に。

日本語もいい感じに表示するにはjlisting.styを拾ってくる必要があるので注意。

参考元から変更している点は、ソースコードを線で囲まず、上下に線を引くだけにしているところ。
frameで変更できる。

\lstset{
...
     frame={tb}
     % frameround=tttt
...
}

範囲を選択_069.png

Solarizedの配色がとてもいい感じ。

minted

いい感じにシンタックスハイライトしてくれる新しめのパッケージ。
listings + jlistingよりも、しっかりハイライト付けてくれる。

pipでPythonのパッケージ入れること、LaTeXのコンパイル時に-shell-escapeオプションをつける必要があるので忘れないように。

mintedでLaTeXドキュメントにソースコードを載せるを参考に。

gpoore/mintedにも細かいドキュメントが置いてあったりする。

例えば、こんな感じに書く。

% ---------
% ここはプリアンブル
\renewcommand{\listingscaption}{ソースコード}
% ---------

\begin{listing}[htbp]
\caption{Hello World.c}
\label{sc:helloworld}

\begin{minted}[breaklines,linenos,frame=lines,framesep=2mm]{c}
#include <stdio.h>

int main(){
    // コメントもいい感じ
    printf("Hello World!\n");
    return 0;
}
\end{minted}
\end{listing}

するとこんな感じになる。
(色変更する方法わからんかった…。)

範囲を選択_073.png

✨ ハイパーリンクをつけていい感じにする

どこで参照してるか分かりやすくなっていい。
この設定をすると、デフォルトでしおり付きPDFが生成されるようにもなる。

\usepackage[dvipdfmx]{hyperref} % ハイパーリンクつき文章にする
\usepackage{pxjahyper}
\hypersetup{
    colorlinks=false,
    citebordercolor=green,
    linkbordercolor=red,
    urlbordercolor=cyan,
}

画像は次の参考文献をいい感じにするで一緒に載せています。

✨ 参考文献をいい感じにする

日本語と英語の混在する参考文献を書くのは結構大変(らしい)。
それに加え、IEEEのスタイルに従って書きたい。

というのを同時に出来る、電気学会/IEEE, 日英両対応bstファイルがある。
ehki/jIEEEtranにて公開されており、分かりやすい使い方も書いてある。

Webページの参照日(urldate)を書きたかったので少しいじる。

ENTRYurldateを追加して、

jIEEEtran.bst
%%%%%%%%%%%%%%%%%%
%% ENTRY FIELDS %%
%%%%%%%%%%%%%%%%%%

ENTRY
  { 
...
    url
    urldate
...

URLを表示する関数の部分に1行追加して、参照日を表示するようにする。

jIEEEtran.bst
%% URL

FUNCTION {format.url}
{ is.use.url
    { url empty$
      { "" }
      { this.to.prev.status
        this.status.std
        cap.yes 'status.cap :=
        name.url.prefix " " *
        "\url{" * url * "}" *
        " Last visited:{" * urldate * "}" *
        punct.no 'this.status.punct :=
        punct.period 'prev.status.punct :=
        space.normal 'this.status.space :=
        space.normal 'prev.status.space :=
        quote.no 'this.status.quote :=
      }
    if$
    }
    { "" }
  if$
}

するとこんな感じにできる。

範囲を選択_070.png

用意したbibファイルはこんな感じ。
bibファイルは、Mendeleyなど使ってまとめて吐き出すのが良いと思う。

reference.bib
@article{jpArticle3,
  author = {{山田 八郎} and {山田 六郎}},
  year = {2010},
  journal = {日本語の学会名},
  title = {手法1と手法2,どちらが正しいのか?},
  number = {1},
  pages = {15},
  volume = {5}
}
@article{enArticle3,
  author = {Goro Yamada and Rokuro Yamada},
  year = {2018},
  journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence},
  title = {Title2 is true?},
  month = {nov}
}
@book{jpBook1,
  author = {佐藤, 一郎},
  year = {2010},
  publisher = {日本語出版},
  address = {東京},
  title = {日本語本},
  edition = {1},
  pages = {100--200}
}
@misc{example,
  title = {Example Domain},
  url = {http://example.com/},
  urldate = {2020-04-18}
}

latexmkrcを書いて楽にコンパイルする

これさえ書いておけば、ファイルの変更があれば自動でPDFを更新してくれる

bibtexを実行する際にPythonプログラムを走らせるが、これは先程のehki/jIEEEtranのものである。
日本語と英語を併記する時によしなにしてくれる。

Windowsユーザ向け、VSCodeユーザ向けの使い方も書いてあるので参考元を見てぜひ使ってほしい。

latexmkrc
#!/usr/bin perl
$latex            = 'uplatex -synctex=1 -halt-on-error -shell-escape';
$latex_silent     = 'uplatex -synctex=1 -halt-on-error -interaction=batchmode -shell-escape';
$bibtex           = 'python mixej.py %B; upbibtex %O %B; python mixej.py %B';
$dvipdf           = 'dvipdfmx %O -o %D %S';
$max_repeat       = 5;
$pdf_mode         = 3;
$pdf_previewer    = 'evince';

PDFプレビューアは各自、自分が使用しているものに変更してほしい。

🔧 テンプレート

この記事で扱ったテンプレートプロジェクトをGithubにあげておいたので、ぜひ活用してほしい。

使い方の一例としては、ターミナル1でlatexmkを走らせておき、

$ latexmk -pvc

ターミナル2で、Vimなどのエディタを用いてformat.texを編集し、保存する。
保存時に自動的にコンパイルが開始され、PDFが出力される。といった感じ。

🎉 おわりに

課題、やる気が出なくてエディタ周りの環境ばかり整えていましたが、せっかくなので1つまとめてみました。

LaTeXを使うなら、これを機会にぜひ、いい感じのレポートに仕上げてみてください!

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
10
Help us understand the problem. What are the problem?