LaTeX のプログラムリストを tcolorbox を使って出力する

出版日 2019-04-09
変更日 2019-04-09
単語数 903 2 mins read

tcolorbox パッケージを使うと、 箱にはいった環境を比較的簡単に作ることができます tcolorbox のドキュメントを見るには次のコマンドを使用してください: いろいろな例がのっています(英文です)。

(sh)
texdoc tcolorbox

ここでは tcolorbox を使った、プログラムリストの表示を 紹介します。

1 tcolorbox の設定

まず tcolorbox の設定を行ないます:

ソースコード 1: tcolorbox 設定 (latex)
\usepackage{tcolorbox}
\tcbuselibrary{breakable,skins,raster,listings}
\tcbuselibrary{external}
\tcbuselibrary{minted} % プログラムリスト用に minted を使う
\tcbEXTERNALIZE

2 programlist 環境

プログラムリストを出力する programlist 環境を 作成します。

ソースコード 2: プログラムリスト用環境 programlist (latex)
\newtcblisting[
auto counter,
number within=chapter,
list inside=box]{programlist}[3][]{
listing engine=minted,% リスト環境は minted
minted style=monokai,% 使用するテーマ
minted language=#2, % 使用する言語
minted options={fontsize=\small,
                breaklines,% 途中で改行する
                breakanywhere},%
title={\sffamily\bfseries リスト \thetcbcounter #3},
#1,% ラベル
breakable,%
colback=black!90!white,
colupper=white,
colframe=blue!75!white,
listing only,%
left=0mm,
enhanced,%
  }%

3 programlist 環境の例

programlist 環境は このようにして使います(Org-mode のマニュアルからの例):

(latex)
\begin{programlist}[label={prog-exam1}]{lisp}{: Emacs Lisp の例}(defun org-xor (a b)
"Exclusive or."
(if a (not b) b))
\end{programlist}

このように出力されます:

図1:  programlist 環境の出力例

図1: programlist 環境の出力例

4 Org-mode から programlist 環境を使う

この programlist 環境を、 Org-mode の LaTeX エクスポートから 使う設定です。

4.1 programlist 環境を使うための Org-mode の設定

Org-mode の src ブロックを LaTeX の programlist 環境に変換するための設定です。

次のものを Emacs の初期化ファイルに入れてください:

ソースコード 3: ソースコードの LaTeX 環境への変換 (emacs-lisp)
(setq org-latex-custom-lang-environments
      '(
        (c "\\begin{programlist}[label={%l}]{c}{: %c}%s\\end{programlist}")
        (ditaa "\\begin{programlist}[label={%l}]{text}{: %c}%s\\end{programlist}")
        (emacs-lisp "\\begin{programlist}[label={%l}]{lisp}{: %c}%s\\end{programlist}")
        (ruby "\\begin{programlist}[label={%l}]{ruby}{: %c}%s\\end{programlist}")
        (latex "\\begin{programlist}[label={%l}]{latex}{: %c}%s\\end{programlist}")
        (lua "\\begin{programlist}[label={%l}]{lua}{: %c}%s\\end{programlist}")
        (java "\\begin{programlist}[label={%l}]{java}{: %c}%s\\end{programlist}")
        (javascript "\\begin{programlist}[label={%l}]{javascript}{: %c}%s\\end{programlist}")
        (json "\\begin{programlist}[label={%l}]{json}{: %c}%s\\end{programlist}")
        (plantuml "\\begin{programlist}[label={%l}]{text}{: %c}%s\\end{programlist}")
        (maxima "\\begin{programlist}[label={%l}]{text}{: %c}%s\\end{programlist}")
        (ipython "\\begin{programlist}[label={%l}]{python}{: %c}%s\\end{programlist}")
        (python "\\begin{programlist}[label={%l}]{python}{: %c}%s\\end{programlist}")
        (perl "\\begin{programlist}[label={%l}]{perl}{: %c}%s\\end{programlist}")
        (html "\\begin{programlist}[label={%l}]{html}{: %c}%s\\end{programlist}")
        (org "\\begin{programlist}[label={%l}]{text}{: %c}%s\\end{programlist}")
        (typescript "\\begin{programlist}[label={%l}]{typescript}{: %c}%s\\end{programlist}")
        (scss "\\begin{programlist}[label={%l}]{scss}{: %c}%s\\end{programlist}")
        (sh "\\begin{programlist}[label={%l}]{shell}{: %c}%s\\end{programlist}")
        (shellinput "\\begin{shellinput}[%c]%s\\end{shellinput}")
        (shelloutput "\\begin{shelloutput}[%c]%s\\end{shelloutput}")
        ))

必用であれば言語を追加してください。

4.2 mystyle.sty の作成

Org-mode のファイルの中で programlist の設定を書くのは 面倒くさいので、 定義を格納する mystyle.sty を 次の内容で作成します。

ソースコード 4: mystyle.sty (latex)
\usepackage{tcolorbox}
\tcbuselibrary{breakable,skins,raster,listings}
\tcbuselibrary{external}
\tcbuselibrary{minted} % プログラムリスト用に minted を使う
\tcbEXTERNALIZE
\newtcblisting[
auto counter,
number within=chapter,
list inside=box]{programlist}[3][]{
listing engine=minted,% リスト環境は minted
minted style=monokai,% 使用するテーマ
minted language=#2, % 使用する言語
minted options={fontsize=\small,
                breaklines,% 途中で改行する
                breakanywhere},%
title={\sffamily\bfseries リスト \thetcbcounter #3},
#1,% ラベル
breakable,%
colback=black!90!white,
colupper=white,
colframe=blue!75!white,
listing only,%
left=0mm,
enhanced,%
  }%

4.3 Org-mode のファイルの設定

次に Org-mode のファイルの設定です。

ソースコード 5: Org-mode のファイルの設定 (org)
# ドキュメントクラスの指定
#+LATEX_CLASS: jsbook
# ドキュメントクラスのオプションの指定
#+LATEX_CLASS_OPTIONS: [dvipdfmx,a4j,uplatex,openany]
# カスタムスタイルの読み込み
#+LATEX_HEADER: \usepackage{mystyle}

以上で色つきの箱にはいったプログラムリストが Org-mode から LaTeX にエクスポートされるはずです。


Tags: LaTeX

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now
This website uses cookies to ensure you get the best experience on our website. Learn more Got it