latex-with-unicode-program

../_images/sphx_glr_latex-with-unicode-program.svg
%!TEX program = xelatex
%!TEX options = -shell-escape --file-line-error --synctex=1
\documentclass[
	a4paper,xelatex,
	everyparhook=compat,
	ja=standard,
	oneside,
	textwidth-limit=50,
	texwidth=50ze
]{bxjsbook}
\evensidemargin 0.0in
\oddsidemargin 0.0in

\usepackage{amsmath,amsthm,amsfonts}
\usepackage{mathrsfs}
\usepackage[
	setpagesize=false,
	bookmarksnumbered=true,%
	bookmarksopen=true,%
	colorlinks=true,%
	linkcolor=blue,
	citecolor=blue,
	urlcolor=blue
 ]{hyperref}
\usepackage{cleveref}


% 基本のフォント設定
\usepackage{fontspec}
\usepackage{polyglossia}
\usepackage{unicode-math}

%\usepackage[english,japanese]{babel}

% 言語と日本語フォントの設定
\setmonofont{Cica} % https://github.com/miiton/Cica
\setmainlanguage{japanese}
\setotherlanguage{english}
\newfontfamily\japanesefont{Hiragino Mincho Pro}  % ヒラギノ明朝を使用
\newfontfamily\cjkfont{Hiragino Mincho Pro}       % CJKフォント
\newfontfamily\cjkfontsf{Hiragino Sans W3}
%%check fontfamilies
% fc-list : family | grep IPA
% IPA明朝,IPAMincho

\usepackage{xcolor}
\usepackage[]{graphicx}
\usepackage{wrapfig}

\usepackage{minted}
\usemintedstyle{perldoc} % minted の style $ pygmentize -L styles で利用可能なstyleが表示される.

\definecolor{LightGray}{gray}{0.9}
\setminted{
    breaklines=true,
    escapeinside=||,
    mathescape=true,
    linenos=true,
    numbersep=10pt,
		xleftmargin=5pt,
    fontsize=\scriptsize,
		bgcolor=LightGray,
}

\date{\today}

\begin{document}

\begin{wrapfigure}{r}[0pt]{0.4\textwidth}
\begin{minted}{julia}
using Random
β₀ = 2 # β₀は\beta<tab>\_0<tab>と入力
≠ # \noteq<tab>
→ # \rightarrow<tab>
⊂ # \subset<tab>
∘ # \circ<tab>
¬ # \neg<tab>
∀ # \forall<tab>
∃ # \exists<tab>
∈ # \in<tab>
∉ # \notin<tab>
∑ # \sum<tab>
∏ # \prod<tab>
∧ # \wedge<tab>
∨ # \vee<tab>
∩ # \cap<tab>
∪ # \cup<tab>
∼ # \sim<tab>
≈ # \approx<tab>
≡ # \equiv<tab>
≢ # \nequiv<tab>
≤ # \leq<tab>
≥ # \geqv
\end{minted}
\end{wrapfigure}
juliaやpythonはUnicode symboleを変数に利用することができ,合字(ligature)に対応してるが,これらを含むソースコードをそのままコピペでTeXに貼り付けようと思うと,Unicode symbolのフォントの問題でフォントが存在しない場合に文字が消えたり,Tofu $\Box$に置換されたりする.そのため対応するmono space fontをUnicodeや合字に対応したものTeXに指定する必要があるが,欧米のフォント(JuliaMonoなど)は日本語に対応していないため,日本語フォントで探す必要がある.上記要件を満たす日本語フォントして\href{https://github.com/miiton/Cica}{Cica}が要件を満たす(macならhomebrewでinstall可能).

加えてコースコードの転記にlstlistingでは上手いかなかった(ような気がする)ので,mintedを使うことにするがmintedはxelatexでない機能しないようなのでXeLaTeXを使う.ただし,xelatexを使う際に以下の点に注意が必要
\begin{enumerate}
\item documentclassのオプションで``everyparhook=compat"としないとwrapfigがうまく機能しない.
\item \backslash usepackage[dvipdfmx]{graphicx}のようにオプションdvipdfmxをつけるとclashする可能性がある.
\item mintedを用いる場合は python packageのpygmentsがおそらく必要で,
\begin{minted}[
		breaklines=true,
	  escapeinside=||,
	  mathescape=true,
	  linenos=true,
	  numbersep=10pt,
	  fontsize=\scriptsize,
	  bgcolor=black,
	  formatcom=\color{white},
	]{bash}
$ which pygmentiz
\end{minted}
で何も表示されない場合は,``pip install pygments"もしくは``conda install pygments"などでpygmentsをインストールする必要があるかもしれない(anaconad,minicondaにはデフォルトで含まれているかもしれない?).
\item minted を使う場合,``xelatex -shell-escape main.tex"のように-shell-escapeのオプションが必須になる.TeXShopでこのオプションをつけるには,マジックコメント(ソースファイル参照)か下記のパスのXeLaTeX.engineの最下部のコマンドを編集して-shell-escapeを追記する.
\begin{minted}[
%		breaklines=true,
%	  escapeinside=||,
%	  mathescape=true,
%	  linenos=true,
%	  numbersep=10pt,
%	  fontsize=\scriptsize,
	  bgcolor=black,
	  formatcom=\color{white},
	]{bash}
$ cat ~/Library/TeXShop/Engines/XeLaTeX.engine
#!/bin/tcsh

set path= ($path /Library/TeX/texbin /usr/texbin /usr/local/bin)
xelatex  -shell-escape -file-line-error -synctex=1 "$1"
\end{minted}
\end{enumerate}

加えてmintedを使いかつcleverefを使う場合に,\backslash usepacageの順番や場所がシビアになる.
具体的には
amsmath,hyperefのimport後,かつfontspecなどのfontの設定の前で読み込むと私の環境ではうまくいった.
加えて
\begin{listing}[H]
\backslash usepackage[english,japanese]\{babel\}
\end{listing}
を入れるとうまくいかない.


\end{document}