よし呟こう

思ったことを呟きます。

レポートをLatexで書く。私にとっての便利部品集。

お久しぶりです。生きています。

大学の講義のレポートを勝手にLatexで書くようになって早1年が経ちました。私にとってLatexは痒い所に手が届く良いものなのですが、自由度が高い故に色々とやることと方法があって大変。今時素のLatexを書く人はいないと思うのですが、1年間Latexと戯れた中で筆者が便利だと感じたものを述べておきます。......というより、毎回忘れてしまうので忘れ防止にメモしておきたい。

実際使ってみて便利だったものを集めた工夫・部品集です。

あまりLatexについて理解を深めているわけではないので、間違っている点があったらご指摘いただけると幸いです。

なお環境は次の通りです。

  • OS ... Windows 10
  • ドキュメントクラス ... jsarticle
  • 処理系 ... uplatex + dvipdfmx

適宜追加していきます。


コンテンツ

 

【便利】余白調整

これなしではやってられない!というものです。発見するまでは\vspace{}\hspace{}で一生懸命余白を調整するという、Latexとしては非常によくないことをやっていました(沼にはまりますので注意)。とりあえずこれだけ書いておけば、ある程度の余白の問題は解決できます。

% 行の間隔
\def\baselinestretch{0.97} 

% 図と図の間隔
\setlength\floatsep{3truemm} 

% 本文と図の間隔
\setlength\intextsep{5pt} 

% 図とキャプションの間隔
\setlength\abovecaptionskip{1truemm}

% 式と本文・図の間隔
\AtBeginDocument{
  \abovedisplayskip = 0.5\abovedisplayskip
  \abovedisplayshortskip = 0.5\abovedisplayshortskip
  \belowdisplayskip = 0.5\belowdisplayskip
  \belowdisplayshortskip = 0.5\belowdisplayshortskip
}

% 最初は以下のようなものを使おうとしてました。
% なぜか筆者の環境では機能せず、ググるのも面倒だったので止めました...。
% \setlength\abovedisplayskip{2pt}
% \setlength\belowdisplayshortskip{2pt}

% テーブル要素の横方向の間隔
\setlength\tabcolsep{1mm}

% テーブル要素の縦方向の間隔
% \setlength\tabrowsep{1mm}

また用紙の余白調整も行っています。これはgeometryパッケージを使っています。truemm単位は実際の紙面上での大きさを表すものですが、以下の例ではこれを用いることで直接四隅の余白を20mmになるように調整しています。

\usepackage[top=20truemm, bottom=20truemm, left=20truemm, right=20truemm]{geometry}

後で述べるファイル分割と合わせて、プリアンブルファイル内に書いておくと便利です。
 

【便利】二段組みとぶち抜き

二段組みが使いたい!というときは\documentclassのオプションにてtwocolumnを記入します。例えば、jsarticleクラスで、uplatexdvipdfmx処理系を使ったa4paper(A4用紙縦)の二段組みレポートを書くときは

\documentclass[twocolumn, uplatex, dvipdfmx, a4paper]{jsarticle}

のようにしています(あっていますよね?)。

二段組みにすると、例えば\begin{figure}...\end{figure}などの仕様が変わります。例えば\begin{figure*}...\end{figure*}のように環境に*を付ければ二段組みを貫通して表示させることができます。詳細はググっていただくとして、一番厄介な問題があります:位置オプションのbです

前述のように表や図は、*によって段組みを貫通して表示させられますが、位置オプションのbだけはそのままでは機能しません。これを使うためには次のようにnidanfloatパッケージをプリアンブルで読み込んでおく必要があります。読み込みさえすれば機能します!

\usepackage{nidanfloat}  % もはやこれはおまじない!

アブストラクト、「初めに」や「緒言」を一段で表示するときは\twocolumn[(二段組みを回避したい文章)]を使うとよいでしょう。

\documentclass[twocolumn, uplatex, dvipdfmx, a4paper]{jsarticle}
\usepackage{nidanfloat}
...
\begin{document}
  \twocolumn[ここは一段組みで表示されます]
  ここから下は二段組みで表示されます
...
\end{document}

なおtphは他に読み込んでいるパッケージによりますが、デフォルトでは二段組みを貫通させることができます。Hタグ(別途hereパッケージが必要)も可能です(※ただし環境(\begin{...} ... \end{...}のこと)によっては前述のいずれも使うことができません)。
 
 

【便利】ファイルの分割

Latexでは\input{読み込みたいTEXファイル(.tex)}または\include{読み込みたいTEXファイル(.tex)}(拡張子「.tex」はあってもなくてもよい)を使うことで簡単にファイル分割を行うことができます。\input{}は改ページなし、\include{}は改ページありの読み込みです。

上の節と合わせて、アブストラクトは冒頭に一段組みで、それ以外の文章は二段組みで、別々のファイルに分割して書きたい(main.texに他ファイルを集約したい)。こんな要望には次のようにして答えることができます。

% main.tex
\documentclass[twocolumn, uplatex, dvipdfmx, a4paper]{jsarticle}
...
\usepackage{docmute}  % もはやこれはおまじない!
\input{preamble}
...
\begin{document}
  \twocolumn[\input{アブストラクトのファイル}]
  \input{イントロダクションのファイル}
  \input{実験方法のファイル}
  \input{結果のファイル}
...
\end{document}

大事な点が3つあり、1つは\usepackage{docmute}です。大雑把に言えば読み込むファイル内でプリアンブルの中身を使うような場合はエラーがでるのを回避してくれます(笑) Latexの文章構造上仕方がないことですが、おまじないとして書いておくと事故を回避できます(おまじないレベルの扱いのため、この記事執筆のときにすっかり忘れていました)。

2つ目に、プリアンブルを別ファイルにして\input{preamble}で読み込んでいます。この書き方では毎回preamble.texが作業ファイル内になければなりません。私は前作った文書をフォルダごとコピペしていらないファイルを削除して再利用しているため、ほとんど気にならないのですが、気になる方はpreamble.styとしてローカルに保存して、パスを通しておけばよさそうです。

最後に\twocolumn[...]の中で普通にLatexのコードを書いてもよいです。個人的に目から鱗が落ちました。

キャプションや表番号などを調整

論文を読んでいると、学会によりますが、文章の文字の大きさよりもキャプションの文字の大きさが小さいことがあります。なんだかそれっぽくてかっこいい!と思って使っていますが特に意味はないです(笑)

キャプションのスタイルを変えるにはcaptionパッケージを使うと便利です。そこまで自由度はないですが(効かないときもあるので...)、簡便です。

\usepackage{caption}

% 図・スキーム・表のフォントサイズの調整
\captionsetup[figure]{font=small, labelfont=small}
\captionsetup[scheme]{font=small, labelfont=small}
\captionsetup[table]{font=small, labelfont=small}

 

化学スキームに番号を振る

化学系の文章を書くときは、化学反応1つ1つにスキーム番号を別で振ることがあります。図番号でもよいのですが、スキーム番号を振ることが多いと思います。もちろん別途カウンターを定義して使ってもよいのですが、chemschemeパッケージを読み込むと、何も考えなくてもよいので楽でした。例えば次のように使います。

\usepackage{chemscheme}
...
\begin{document}
...
  \begin{scheme}[H]
    \centering
    \includegraphics[width=\linewidth]{figure/scheme1.jpg}
    \caption{これはキャプションです。}
    \label{sc:labellabel}
  \end{scheme}
...
\end{document}

ほとんど図や表と同様に扱うことができます。図表のスタイル設定の大半を利用できます。表・図・式のように特別なラベルscを使うことができます。これがなかなか便利です。

\label{sc:labellabel}, \ref{sc:labellabel}

......とこのように書いたのは良いのですが、私は番号のためだけに使っているので、それ以上の便利さはわかりません。
 

参考文献の番号を上付きに

Latexは参考文献周りが極めて便利です。ラベル機能と数式の美しさに加えて、筆者がLatexを使う理由の1つでもあります。しかし1つだけ問題があって、それはデフォルトで使うと参考文献の番号が上付き文字にならないということです。そして大括弧表示となります。例えば...

これは引用です[1]。

のようになってしまいます。私はそうではなくて

これは引用です1)

のように表示したい!これを解決するには、まずoverciteパッケージを読み込み、次にスタイルを変更します:

\usepackage{overcite}
\renewcommand\citeform[1]{#1)}

 

図の位置

言わずとしれた有名なパッケージhereについてです。デフォルトでは挿入したい図の位置は自動で調整されますが、一度Latexを使ってみるとわかります、なんとまあ融通がきかないこと!hereパッケージはHオプションをつけることで、図表Schemeを指定位置に強制出力できるという便利なパッケージです。

\usepackage{here}  % もはやこれはおまじない!
\usepackage{chemscheme}
...
\begin{document}
...
% [h]はhere(「ここに出力」)オプションですが効きません。
% [H]は強制出力です!
  \begin{scheme}[H] 
    \centering
    \includegraphics[width=\linewidth]{figure/scheme1.jpg}
    \caption{これはキャプションです。}
    \label{sc:labellabel}
  \end{scheme}
...
\end{document}

...え?hオプションがあるじゃないか?...おっしゃる通りですが、これは強制出力ではないので、ほとんど言うことをきいてくれません。
 

単位→siunitx、化学式→mhchem

SI単位を使うことが多いのですが、siunitxパッケージが便利です。単位を斜体ではなく立体で、\mathrm{}を使わずに表せるということで重宝しております。

構造式ではなく、化学式を書くときに便利なのがmhchemパッケージ。化学式は斜体ではなく、立体で、しかも右左上下縦横無尽に添え字を使うので\mathrm{}などではどうしても煩雑になりがち。それを解決してくれます。

いずれも詳しい使い方は調べれば、とてもよいサイトが出てくるので、そちらにお任せするとします。筆者はその方々の記事を印刷して手元に置いています。

URLと漢字

参考文献にインターネット文献を使わざるをえないときがありました。私はbibtexを使い、JabRefで文献を管理していますが、JabRefのコメント欄(bibtexでいうとnote)にURLをそのまま貼り付けるとエラーがでてコンパイルできません。いわゆるエスケープが必要なのですが、面倒極まりない......。そういうときはurlパッケージを読み込んで、

@Article{ID,
  author = {Hogehoge},
  title  = {Fugafuga},
  year   = {2022},
  note   = {URL: \url{https://fizzbuzz.com/article/2022/piyopiyo.pdf}}
}

とすれば回避できます。簡単で便利です。

また、日本語は漢字の問題があります。例えばハシゴダカ(髙)はそのまま出力できません(...でしたよね?たしかbibtexだと弾かれた覚えがあります)。そのときにotfパッケージを読み込みます。ハシゴダカは16進数4桁Unicode9AD9なので、

\usepackage{otf}
...
\otf{9AD9}

で出力できるようになります。

小ネタ系

ローマ数字の出力には\ajRoman{数字}を使います。これはotfパッケージの下で使えます。

式の参照をするときは\eqref{eq:式のラベル}とすると、いちいち手書きで括弧を付ける必要がないので便利です。