LaTeX で Gaussian の入力ファイルをシンタックスハイライト

  • LaTeX で執筆している某書籍中で Gaussian の入力ファイルを説明するときに、シンタックスハイライト(構文の各部を色分けして表示)したい
  • プログラミングコードを組版する LaTeX 拡張の listings パッケージをカスタマイズするとできた

方法

Gaussian 入力ファイル用の listings 設定

  • listings は Overleaf にはインストール済みのなので、usepackageすれば使える
  • listings は、もちろんだけど、Gaussian だけじゃなくて、どの量子化学計算アプリにも対応していない
  • listings はパラメータをカスタマイズできるので、Gaussian 用にキーワードの定義&スタイルの設定をしてみた
%%% Gaussian の入力ファイルを TeX で扱うための設定

\usepackage{listings}

% listings: キャプション名を変更
\renewcommand{\lstlistingname}{Input}

% listings: Gaussian 用のキーワード定義
\lstdefinelanguage{Gaussian}{
  morecomment=[l]{\%}, % %で始まる行は設定行
  morekeywords=[1]{b3lyp, hf, mp2, ccsd, rb3lyp}, % 計算手法に関連するキーワード
  morekeywords=[2]{opt, freq, sp, td, irc}, % 計算内容を指定するキーワード
  morekeywords=[3]{nosymm, scrf, empiricaldispersion}, % オプションに関連するキーワード
  morestring=[b]", % ダブルクォーテーションで囲まれた部分を文字列として認識
  sensitive=false, % キーワードの大文字小文字を区別しない
}

% listings: ハイライトのスタイル
\lstset{
  language=Gaussian,                        % 使用する言語として Gaussian を指定
  backgroundcolor=\color[gray]{0.95},       % 背景色
  basicstyle=\ttfamily\small\color{black},  % 基本テキストスタイル
  commentstyle=\color{teal},                % %で始まる行のスタイル
  keywordstyle=[1]\color{cyan}\bfseries,    % 計算手法のスタイル
  keywordstyle=[2]\color{orange}\bfseries,  % 計算内容のスタイル
  keywordstyle=[3]\color{purple}\bfseries,  % オプションのスタイル
  stringstyle=\color{red},                  % 文字列
  showstringspaces=false,                   % 文字列内のスペース表示を無効化
  numbers=left,                             % 行番号を左側に表示
  numberstyle=\tiny\color{gray},            % 行番号のスタイル
  stepnumber=1,                             % 1行ごとに行番号を表示
  numbersep=10pt,                           % 行番号とテキストの間隔
  breaklines=true,                          % 長い行は自動的に改行
  frame=tb,                                 % 枠線の位置(上下に)
  rulecolor=\color{lightgray},              % 枠線の色
  framexleftmargin=5pt,                     % 枠の左余白を設定
  captionpos=b,                             % キャプションの位置
  aboveskip=15pt,                           % このブロックの上余白
  belowskip=10pt,                           % このブロックの下余白
}

使い方

  • 上記を LaTeX の原稿コードにそのままコピペでも良いけれど、gaussian.styとして保存すれば、\usepackage{gaussian}として読み込んでも使える
\documentclass{article}
\usepackage{xcolor}

\usepackage{gaussian}

\begin{document}

\begin{lstlisting}[caption={Methane}]
%Chk=opt.chk
%Mem=6GB
%NProcShared=4
#P B3LYP/6-31G(d) Opt EmpiricalDispersion=GD3BJ NoSymm

Molecule specification

0 1
C    0.000000    0.000000    0.000000
H    0.000000    0.000000    1.089000
H    1.026719    0.000000   -0.363000
H   -0.513360   -0.889165   -0.363000
H   -0.513360    0.889165   -0.363000
\end{lstlisting}

\end{document}

結果

カスタマイズ前

カスタマイズ後

考察

  • 基底関数(6-31G(d))は、数字などなどが含まれていて、キーワードとして定義するのが面倒そうだったのであきらめた
  • キーワードの定義は、まあ、説明に必要になったものを適宜に追加すれば良いよね

結論

  • LaTeX で Gaussian の入力ファイルをシンタックスハイライトできた
  • 同様に、GAMESS の入力ファイル用の定義も作ろうかな(作らなければ)と思っている
LaTeXGaussian
Posted :