この記事はあくあたん工房 GWアドベントカレンダー2020の1日目の記事として書かれたものです。
💪 モチベーション
課題、LaTeXで書いてるってだけで満足してませんか?
僕でした...。
せっかくなら楽にいい感じの見た目に仕上げて提出しちゃいたい!ですよね!
✨ 目標
- タイトルをいい感じにする
- 問題文をいい感じにする
- ソースコードをいい感じにする
- ハイパーリンクをつけていい感じにする
- 参考文献をいい感じにする
-
latexmkrc
を書いて楽にコンパイルする
こんな感じに仕上げます。
🙅 書いてないこと
- LaTex環境の構築方法
- 各エディタごとの設定
環境の作り方は分かりやすい記事があると思うのでそれを読んでほしい。
エディタは好きなエディタを使ったほうが執筆作業が捗ると思う。
💻 僕の環境
一応、僕の環境を書いておきます。
OS | Manjaro 20.0 Lysia
Kernel | x86_64 Linux 4.19.118-1-MANJARO
TeX | TeX Live 2019
✨ タイトルをいい感じにする
学籍番号、名前は忘れると点数つかないのは当たり前です。
\maketitle をカスタマイズしたを参考に。
\usepackage{mdframed}
するのを忘れないように。
例えばこんな感じ。
✨ 問題文をいい感じにする
課題提出では、解答だけ書けば良いのではなく、問題分もちゃんと書かないといけません。
[LaTeX] problem --- 「問題」と「解答」の記述を参考に。
落としてきたproblem.sty
の文字エンコードだけUTF-8
にエンコードし直しておきましょう。
✨ ソースコードをいい感じにする
可能な限りシンタックスハイライト付けた方が読みやすいです。
listings + jlisting
listingsの言語を追加するを参考に。
日本語もいい感じに表示するにはjlisting.sty
を拾ってくる必要があるので注意。
参考元から変更している点は、ソースコードを線で囲まず、上下に線を引くだけにしているところ。
frame
で変更できる。
\lstset{
...
frame={tb}
% frameround=tttt
...
}
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}
するとこんな感じになる。
(色変更する方法わからんかった…。)
✨ ハイパーリンクをつけていい感じにする
どこで参照してるか分かりやすくなっていい。
この設定をすると、デフォルトでしおり付きPDFが生成されるようにもなる。
\usepackage[dvipdfmx]{hyperref} % ハイパーリンクつき文章にする
\usepackage{pxjahyper}
\hypersetup{
colorlinks=false,
citebordercolor=green,
linkbordercolor=red,
urlbordercolor=cyan,
}
画像は次の参考文献をいい感じにする
で一緒に載せています。
✨ 参考文献をいい感じにする
日本語と英語の混在する参考文献を書くのは結構大変(らしい)。
それに加え、IEEEのスタイルに従って書きたい。
というのを同時に出来る、電気学会/IEEE, 日英両対応bstファイルがある。
ehki/jIEEEtranにて公開されており、分かりやすい使い方も書いてある。
Webページの参照日(urldate)を書きたかったので少しいじる。
ENTRY
にurldate
を追加して、
%%%%%%%%%%%%%%%%%%
%% ENTRY FIELDS %%
%%%%%%%%%%%%%%%%%%
ENTRY
{
...
url
urldate
...
URLを表示する関数の部分に1行追加して、参照日を表示するようにする。
%% 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$
}
するとこんな感じにできる。
用意したbibファイルはこんな感じ。
bibファイルは、Mendeleyなど使ってまとめて吐き出すのが良いと思う。
@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ユーザ向けの使い方も書いてあるので参考元を見てぜひ使ってほしい。
#!/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を使うなら、これを機会にぜひ、いい感じのレポートに仕上げてみてください!