[LaTeX] titlesec+TikZでSectionを霊夢っぽく

# 完成品
霊夢のリボンをイメージしてSectionをアレンジしました。
![reimu_fin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625815/a160d136-3e59-5f07-5e0a-bb8ea3622265.png)


# はじめに
Qiita初投稿です。間違い、改善点等あれば(お手柔らかに)御指摘お願いします。

#### 本記事の目的
以前筆者が作成した[ゆっくり動画](https://youtu.be/clH7EshQilE)を土台とした記事となっています。動画ではコードの詳細などを含めることができなかったため、本記事を書くに至りました。そのため、今回は以下を目的としています。

 - 動画中のLaTeXソースコードの公開及び解説
 - パッケージ(titlesec,TikZ)の簡単な補足
 - その他豆知識(?)

#### LaTeX環境

 - Mac High Sierra (10.13.6)
 - TeXShop (4.44)
 - TeXLive (2017)

# Section (通常)
![marisa_tex2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625815/931e998e-d3f7-45f4-bef6-1ec94c6bd3c3.png)

```latex:marisa.tex
\documentclass[12pt,dvipdfmx]{article}

\usepackage{float}%[H]
\usepackage{graphicx}
\usepackage{otf}
\usepackage{multicol}%n段組
\usepackage{caption}
\captionsetup{labelformat=empty}
\captionsetup{labelsep=none}

\begin{document}
\section{霧雨魔理沙}
\begin{multicols}{2}
\begin{itemize}
    \item 魔法使い
    \item 主人公
    \item ウェービーな金髪
    \item リボンのついた黒い三角帽
    \item 箒を所持
\end{itemize}
\begin{figure}[H]
    \centering
    \includegraphics[width=6cm]{marisa.png}
    \caption{魔理沙}
\end{figure}
\end{multicols}
\end{document}
```
##### 補足

 - `jsarticle`だと`item`の幅が狭くなるのでわざと`article`を用いました。
 - `twocolumn`だと列間の余白が大きくなるため、調整が必要となり面倒です。
 - `\section*{霧雨魔理沙}`とすることで数字を非表示にすることができます。
 - `\usepackage{caption}`で`\captionsetup{labelformat=empty}`と`\captionsetup{labelsep=none}`を加えることで`figure`の番号を消せます。

# Section (titlesec)
![reimu_titlesec.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625815/a72d8f78-7447-9db2-ecff-00b40683001b.png)

```latex:reimu1.tex
\documentclass[12pt,dvipdfmx]{article}
\usepackage{graphicx}
\usepackage{float}
\usepackage{multicol}
\usepackage{caption}
\captionsetup{labelformat=empty}
\captionsetup{labelsep=none}
\usepackage[explicit]{titlesec}
\titleformat
	{\section}%変更対象
	[hang]%タイプ(hang, block, displayなど)
	{\large}%全体の書式
	{}%ラベル番号書式
	{0pt}%ラベル/見出し間の空き
	{\titleline[l]{
	\hspace{8pt}
	\thesection%ラベル番号
	\hspace{8pt}
	\rule[-4pt]{5pt}{17pt}%黒い四角
	\hspace{8pt}
	#1%見出し内容
	}\titlerule}%見出し前
	{}%見出し後
\begin{document}
\section{博麗霊夢}
\begin{multicols}{2}
\noindent 暗茶$\sim$黒のまっすぐな髪、茶色の眼、(以下略)
\begin{figure}[H]
\centering
\includegraphics[width=6cm]{reimu.jpg}
\caption{博麗霊夢~(出典~:~藤原~様)}
\end{figure}
\end{multicols}
\end{document}
```
##### 補足

 - `\usepackage{titlesec}`は通常だと見出し文字列(=\section{この部分です})の前と後に何かを追加するだけですが、`[explicit]`というオプションをつけることにより、見出し文字列自身を`#1`で受け取ることができるようになります。それを利用して今回は見出し文字列に下線を引くことができました。
 - `\titleformat{変更対象}[タイプ]{全体の書式}{見出し番号書式}{ラベル/見出し間の空き}{見出し前}{見出し後}`が基本形です。
 - `\rule[高さ補正]{横幅}{縦幅}`は黒い四角形を描画できます。証明の最後のマークを書くときに便利ですね。
 - `\rule`の代わりに`\colorbox`を使うとカラフルになります。筆者も霊夢色の赤にするか迷いました。`\colorbox`を細くして下線にもできるのでこっちの方が使い勝手がいいかもしれません。
 - `\thesection`でラベル番号を受け取ることができます。
 - `\titlerule*[<並べるものの長さ>]{<並べるもの>}`で好きなものを下線として並べることができます。最早なんでもありですね。
 - `\titlerule`の直前に`\titleline[位置(c,l,r)]{テキスト}`を入れることでテキストを含めた下線にすることができます。
 - `\noindent`を使うことで、段落最初の空白(インデント)をなくすことができます。
 - `$\sim$`で`~`を書くことができます。全角で普通に`〜`と打つべきでした。
 - 普通に`~`と書くと空白になってしまいます。

# Section (titlesec+TikZ)
![reimu_fin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625815/9b4e5002-462f-ba7e-3b6e-d9fa2d9f29e5.png)

```latex:reimu2.tex
\documentclass[12pt,dvipdfmx]{article}
\usepackage{graphicx}
\usepackage{float}
\usepackage{multicol}
\usepackage{caption}
\captionsetup{labelformat=empty}
\captionsetup{labelsep=none}
\usepackage[explicit]{titlesec}
\usepackage{tikz}

\titleformat{\section}[hang]{\large}{}{12pt}
	{
    \begin{tikzpicture}
	\draw (0,-0.30)node[below]{\Large\thesection};
	\coordinate (O) at (0.0,0.0);
	\draw (O)--($5/4*(0.3,-0.4)$)--($5/4*(0.56,-0.1)$)--cycle;
	\fill[red] (O)--($5/4*(0.3,-0.4)$)--($5/4*(0.56,-0.1)$)--cycle;
	\draw (O)--($5/4*(-0.3,-0.4)$)--($5/4*(-0.56,-0.1)$)--cycle;
	\fill[red] (O)--($5/4*(-0.3,-0.4)$)--($5/4*(-0.56,-0.1)$)--cycle;
	\draw (O)--($6/4*(0.3,-0.4)$)--($6/4*(0.56,-0.1)$)--cycle;
	\draw (O)--($6/4*(-0.3,-0.4)$)--($6/4*(-0.56,-0.1)$)--cycle;
	\fill[white] (O)--($6/4*(0.6,0.4)$)--($6/4*(0.6,-0.3)$)--cycle;
	\fill[white] (O)--($6/4*(-0.6,0.4)$)--($6/4*(-0.6,-0.3)$)--cycle;
	\draw (O)--($5/4*(0.6,0.4)$)--($5/4*(0.6,-0.3)$)--cycle;
	\fill[red] (O)--($5/4*(0.6,0.4)$)--($5/4*(0.6,-0.3)$)--cycle;
	\draw (O)--($5/4*(-0.6,0.4)$)--($5/4*(-0.6,-0.3)$)--cycle;
	\fill[red] (O)--($5/4*(-0.6,0.4)$)--($5/4*(-0.6,-0.3)$)--cycle;
	\draw (O)--($6/4*(0.6,0.4)$)--($6/4*(0.6,-0.3)$)--cycle;
	\draw (O)--($6/4*(-0.6,0.4)$)--($6/4*(-0.6,-0.3)$)--cycle;
	\draw (0.65,-0.6)--(0.8,-0.6)--(0.8,-0.9)--(0.65,-0.9)--cycle;
	\draw (-0.65,-0.6)--(-0.8,-0.6)--(-0.8,-0.9)--(-0.65,-0.9)--cycle;
	\fill[red] (0.65,-0.6)--(0.8,-0.6)--(0.8,-0.9)--(0.65,-0.9)--cycle;
	\fill[red] (-0.65,-0.6)--(-0.8,-0.6)--(-0.8,-0.9)--(-0.65,-0.9)--cycle;
	\draw (0.65,-0.5)--(0.8,-0.5)--(0.8,-1.0)--(0.65,-1.0)--cycle;
	\draw (-0.65,-0.5)--(-0.8,-0.5)--(-0.8,-1.0)--(-0.65,-1.0)--cycle;
	\end{tikzpicture}
	\colorbox{white}{\vbox to1.5zw{\hsize8zw \Large #1 \vfil}}
	}
	{}

\begin{document}
\section{博麗霊夢}
\begin{multicols}{2}
\noindent 暗茶$\sim$黒のまっすぐな髪、茶色の眼、(以下略)
\begin{figure}[H]
\centering
\includegraphics[width=6cm]{reimu.jpg}
\caption{博麗霊夢~(出典~:~藤原~様)}
\end{figure}
\end{multicols}
\end{document}
```

##### 補足

 - `\usetikzlibrary{intersections, calc, arrows...}`をプリアンブルに書くと便利な関数を使えるようになります。筆者はひたすら`\draw`と`\fill`を書きましたが、本当はもっと頭のいい書き方があるのかもしれません。y軸対象みたいな関数が欲しかったところです。
 - 複数行書くときは`\begin{tikzpicture}`と`\end{tikzpicture}`で挟みます。`;`で改行する必要があります。筆者はPython派なのでよく忘れがちです。
 - `\draw (x,y)node[揃える位置]{文字}`で文字を自由な位置に書けます。
 - `\coordinate (点の名前) at (x,y)`でよく使う点を設定しておくと便利です。今思えばもっと設定すべきでした。
 - `\draw (点)--(点)--(点)--cycle`で三角形を記述できます。点の数を増やすことで簡単に多角形に拡張できます。`cycle`の代わりに最初の点を用いても良いのですが、`cycle`で締めないと角が変になります。
 - `\fill[色] (点)--(点)--(点)--cycle`で領域に色を塗ることができます。
 - `$k*(x,y)$`で`(kx,ky)`を表現できます。
 - `\colorbox{white}{\vbox to1.5zw{\hsize8zw \Large #1 \vfil}}`で文字の余白を調整しました。もっといい方法があるんだと思います。

# まとめ

魔理沙の帽子を作る予定はありません。

# 参考

 - [TikZ] LaTeX界のバイブル = 奥村先生の美文書作成入門(第７版)
 - [TikZ] [LaTeXで図を直接描けるTikZの使い方1~5](https://math-note.xyz/latex/tikz/tikz-line/)
 - [titlesec] [LaTeXでセクションとかのデザインを変える](https://qiita.com/krtx/items/deeec0843caf37b66054)
 - [titlesec] [LaTeXでシナリオ同人誌：titlesecパッケージと画像での見出し修飾](https://note.com/komuda/n/ne5f46c780735)
 - [titlesec] http://abenori.blogspot.com/2018/05/titlesec.html