最終更新:2017-09-12 (火) 18:20:32 (284d)

チュートリアル

チュートリアル/レジュメの作成その2

概要

実際に TeX のインストールは終わったし、ある程度使い方は分かったけど、 いまいち実際にどのように使って良いのか分からない、ことがあると 思います。そこで、このページでは私がレジュメを作成する時にどのような 方法を取っているのかを紹介します。四つのパートに分かれています。

原稿の記述方法

基本的にはZR氏の bxjsarticle を使って twocolumn オプションを 付けて ISO A4 の判型でタイプセットしています。

% 最終的なアウトプット
%\documentclass[autodetect-engine,dvi=dvipdfmx,ja=standard,a4j,twocolumn]{bxjsarticle}
% ドラフト段階のクラスオプション (draft を追加)
\documentclass[autodetect-engine,dvi=dvipdfmx,ja=standard,a4j,twocolumn,draft]{bxjsarticle}
% RequiredPackages
\usepackage{balance}
%\usepackage{color}
\usepackage{graphicx}
\usepackage{okumacro}
\usepackage{type1cm}
\usepackage{cite}% hyperref を使うときはコメントアウトする
\usepackage{url}
%\usepackage[bookmarks,bookmarksopen,colorlinks,%
%  bookmarksnumbered]{hyperref}
%\ifdefined\kanjiskip
%  \usepackage{pxjahyper}
%\fi

カラーの印刷は極力避けるようにしているので color パッケージは コメントアウトしています。最終的にウェブなどで資料を配布するときは hyperref + color パッケージを使って、ハイパーリンクを実現した PDF を 作成したいので次の行の先頭のパーセントを外してタイプセットします。

\usepackage{color}
\usepackage[bookmarks,bookmarksopen,colorlinks,%
   bookmarksnumbered]{hyperref}
\ifdefined\kanjiskip
  \usepackage{pxjahyper}
\fi

hyperref を使うのは大げさだと感じる場合、または cite パッケージと 共存させたいときは color パッケージだけ読み込み次のようなマクロを定義し ます。

\usepackage{color}
\makeatletter
\newcommand \href{\leavevmode\begingroup\@sanitize\@href}
\newcommand \@href#1{\special{html:<a href="#1">}\endgroup \@@href}
\newcommand \@@href#1{#1\special{html:</a>}}
\newcommand \hyperurl#1{\href{#1}{{\color{blue}\url{#1}}}}
\makeatother

これで一応リンクは青色で \hyperurl{https://www.google.co.jp} のように記述 できるようになりました。

基本的に図形は Inkscape で描いているので 簡単のため次のようなマクロを 作成しておきます。

% \inkscapeimage*[<オプション>]{<ファイル名>}{<ラベル>}{<図見出し>}

星 '*' を付けたときは段をぶち抜いて、段抜きで図を出力するように します。\<オプション>には \includegraphics 命令に付け加える グラフィックオプションが記述できます。

\makeatletter
\newcommand \inkscapeimage{\@ifstar \@inkscapeimage \@@inkscapeimage}
\newcommand \@inkscapeimage[4][width=\linewidth]{%
  \begin{figure*}[bth]%
    \centering \includegraphics[#1]{img/#2}%
     \caption{#4\label{fig:#3}}%
  \end{figure*}}%
\newcommand \@@inkscapeimage[4][width=\linewidth]{%
  \begin{figure}[htbp]%
     \centering \includegraphics[#1]{img/#2}%
     \caption{#4\label{fig:#3}}%
  \end{figure}}%
\makeatother

上記のようなマクロを作成しておけば Inkscape で描いたような PDF 画像を簡単に取り込む事が出来ます。

次に Inkscape で描いた訳ではなく、既成のビットマップ画像を取り込む 事を考えます。

% \pictimage[<オプション>]{<ファイル名>}{<ラベル>}{<見出し>}
\newcommand*\pictimage[4][width=\linewidth]{%
 \begin{figure}[htbp]%
   \centering\includegraphics[#1]{img/#2}%
   \caption{#4}\label{fig:#3}%
 \end{figure}}

既成のビットマップ画像では段をぶち抜く事はないので、\@ifstar に よる条件分岐はありません。付けたければ上の \inkscapeimage と同じような 処理をしてください。

最後に \figref と \tabref を定義しておきます。これは文中で 図表を参照する時に \figref{input} などとすれば 図 1.3 のように なるための便利なマクロです。

\newcommand\figref[1]{図~\ref{fig:#1}}
\newcommand\tabref[1]{表~\ref{tab:#1}}

もう一つ付け加えるとすれば「参考文献」の他に、「参考ウェブ」というのが あればうれしいものです。そのため、次のような urlbibliography 環境を 新設します。これは okumacro パッケージの mybibliography と 同じような定義ですが、通し番号が A, B, ..., X のようになっていますので、 通常の「参考文献」の通し番号と区別する事が出来ます。

\makeatletter
\newenvironment{urlbibliography}[1]{%
  \list{\@biblabel{\@Alph\c@enumiv}}%
       {\settowidth\labelwidth{\@biblabel{#1}}%
        \leftmargin\labelwidth
        \advance\leftmargin\labelsep
        \@openbib@code
        \@nmbrlisttrue\def\@listctr{enumiv}%
        \let\p@enumiv\@empty
        \renewcommand\theenumiv{\@Alph\c@enumiv}%
        \setcounter{enumiv}{0}}%
  \sloppy
  \clubpenalty4000
  \@clubpenalty\clubpenalty
  \widowpenalty4000%
  \sfcode`\.\@m}
 {\def\@noitemerr
   {\@latex@warning{Empty `mybibliography' environment}}%
  \endlist}
% ラベル付け・参照用コマンド
\newcommand* \urlcite[1]{\nobreakspace[\ref{url:#1}]}
\newcommand* \urllabel[1]{\label{url:#1}}
\makeatother

さて、そろそろ本文を書きましょうか。

\begin{document}

まずはレジュメですから、表題、著者、日付、概要を記述します。

\title{\LaTeXe による実践的なレジュメの作成方法}
\author{学籍番号\quad 名無しの権兵衛\quad hoge@any.server.jp}
\date{\today}
\begin{abstract}
 ここに概要を記述する。概要は本文を要約したものであり、読者が概要のみを
 見れば、その文書の大まかな内容を把握する事ができる事が必要である。
\end{abstract}
\maketitle % ここで実際に表題を出力する

こんな感じで良いでしょう。まぁ、結構適当なんですけど。

あとは適当に \section とは \subsection などで章立てをして行きます。

\section{背景}
ほげほげ
\subsection{なんたらシステム}
ほげほげであるから、\figref{vr}を参照せよ。
 \inkscapeimage[]{vr}{vr}{仮想現実感 (VR) の構成例}% Inkscape で書いた図とか

別に Inkscape で書かなくても、何らかの形式であれば \inkscapeimage 命令が 使えます。

あとは description, itemize, enumerate, tabular などの環境を使って 文書を整えていきます。

\balance
\bibliographystyle{jplain}
\bibliography{\jobname}
 
\section*{参考ウェブページ}
\begin{urlbibliography}{9}
 \item \urllabel{SO} 大座畑重光. 
   \hyperurl{http://homepage.mac.com/ohzahata/}
 \item \urllabel{KS} 坂村健. 
   \hyperurl{http://www.sakamura-lab.org/}
 \item \urllabel{IS} 椎尾一郎. 
   \hyperurl{http://siio.ele.eng.tamagawa.ac.jp/}
 \item \urllabel{JR} 暦本純一. 
   \hyperurl{http://www.csl.sony.co.jp/person/rekimoto.j.html}
 \item \urllabel{TM} 増井俊之. 
  \hyperurl{http://pitecan.com/}
\end{urlbibliography}

ちょこっとプログラムのコードとか載せたいなあぁとか思ったときは Listings のページを参照して見てください。私がいつも取っている 方法は次のような感じです。

\usepackage{listings}
\usepackage{plistings}
\usepackage{comment}
\usepackage{fancybox}
\lstset{%
 language={[LaTeX]TeX},%
 backgroundcolor={\color[gray]{.85}},%
 basicstyle={\small},%
 identifierstyle={\small},%
 commentstyle={\small\itshape},%
 keywordstyle={\small\bfseries},%
 ndkeywordstyle={\small},%
 stringstyle={\small\ttfamily},%
 frame={tb},%
 breaklines=true,%
 columns=[l]{fullflexible},%
 numbers=left,%
 xrightmargin=0zw,%
 xleftmargin=1zw,%
 numberstyle={\scriptsize},%
 stepnumber=5,%
 numbersep=1zw,%
 lineskip=-0.5ex%
}

和文と混在させて組むためのちょっとした工夫が入っていますし、 私の個人的な趣味も入っていますので、ユーザ側で色々と調整して みてください。以下に使用例を載せておきます。

\clearpage
\section*{コラム: Happy \TeX ing! $N$ 個の素数}
さて、コラムとしてここで \TeX を使って素数を求める。アルゴリズムとしては
「今まで登場した素数 ${P} = \{p_1, p_2, \ldots, p_{i - 1}\}$ を
それぞれ現在の整数 $n_i$ で割って、余りが一度も $0$ にならなければ 
$i$ 番目の素数 $p_i$ とするものである。

アルゴリズムとしては次のようになる。
\begin{lstlisting}[language={Pascal},emphstyle={\bfseries},mathescape]
function PrimeNumbers (var $N$: integer)
  var $j$, $k$, $x$: integer;
  var PrimeList [$N$]: integer;
  PrimeList [0] $\leftarrow$ 2;
  $x \leftarrow 1$; $k \leftarrow 1$;
  while $k < N$ do 
    $x \leftarrow x + 2$;
    $j \leftarrow 0$;
    while $j < k$ do 
      if $i = 0$ then
        if $x$ % PrimeList [$j$] then
          break;
      else
        $j \leftarrow j + 1$;
      end
    end
    if $j = k$ then
      PrimeList [$k$] $\leftarrow x$;
      $k \leftarrow k + 1$;
    end
  end
\end{lstlisting}
\TeX では次のように書き直す事になる。
\begin{lstlisting}[language={[LaTeX]TeX}]
\makeatletter
\newcount\@prm@i
\newcount\@prm@N
\newcount\@prm@j
\newcount\@prm@k
\newcount\@prm@x
\def\@amari#1#2{%
   \@prm@i=#1\relax
   \ifnum\@prm@i<#2%
   \else
      \advance\@prm@i-#2\relax%
      \expandafter\@amari{\@prm@i}{#2}%
   \fi
}
\def\showlist#1{[\@for\@member:=#1\do{%
  \@member\space}]}
\def\prime#1{%
  \@prm@N=#1\relax
  \xdef\@prime@list{2}
  \@prm@x=\@ne \relax 
  \@prm@k=\@ne \relax 
  \@whilenum \@prm@k<\@prm@N \do{%
    \advance\@prm@x \tw@ \relax
    \@prm@j=\z@ \relax
    \@whilenum \@prm@j<\@prm@k \do{%
      \@tempcnta=\z@ \relax
      \@for\@member:=\@prime@list \do{%
        \ifnum\@tempcnta=\@prm@j \relax
          \@tempcntb=\@member
        \fi
        \advance\@tempcnta \@ne \relax
      }%
      \@amari{\@prm@x}{\@tempcntb}%
      \ifnum\@prm@i=0 \relax
        \@prm@j=\@prm@k \relax
        \advance\@prm@j \@ne
      \else
        \advance\@prm@j \@ne
      \fi
    }% end
    \ifnum\@prm@j=\@prm@k
      \xdef\@prime@list{%
        \@prime@list,\number\@prm@x}%
      \advance\@prm@k \@ne
    \fi
  }%
  \expandafter\showlist{\@prime@list}%
}
\makeatother
%
\typein[\hoge]{type the sum of prime num: }
\prime{\hoge}\par
\end{lstlisting}
上記の例では素数を格納するために配列を使わずに、単純連結線形リストを
使っているため、処理速度が非常に遅い。これを \TeX のカウンタレジスタ機構
を配列として使ってしまえば処理速度は格段に早くなるが、\TeX システム上で
汎用性の低いものとなる。
%\end{comment}

タイプセット支援

基本的には Makefile を用意したりするのでしょうが、簡易的に YaTeX の タイプセット支援を使っています。
レジュメ程度の小規模な文書であれば YaTeX での Ctrl-c Ctrl-t [j,d,b] などで十分なのです。
デフォルトの設定では Ctrl-c Ctrl-t d をタイプするとタイプセットしたあとで dvipdfmx が実行できるようになっています。

図形描画

基本的に私は Arch Linux において Inkscape で書いているので、 原稿があるディレクトリの下に img ディレクトリを作成し、そこに大体の SVG 形式の *.svg ファイルを置いています。
このときデバイスドライバには dvipdfmx を使っているので、PDF を作成する事にしています。
そこで次のようなシェルスクリプトを用意しています。

#!/bin/bash
i=1;
for f in `ls *.svg`; do
  g=`basename $f .svg`;
  echo -ne "$i: $g.svg. ";
  if [ -f $g.eps ] ; then echo -n "."; else inkscape -D -z --file=$g.svg --export-eps=$g.eps; fi
  if [ -f $g.pdf ] ; then echo -n "."; else epstopdf $g.eps; fi
  echo " ok";
  i=$((${i} + 1));
done

このようにしておけば img ディレクトリに移動し

./any.sh 

などと上記のスクリプトを実行すれば

1: digitaldesk.svg. ..ok
2: focus.svg. ..ok
3: hci.svg. ..ok
4: model.svg. ..ok
5: multimedia.svg. ..ok
6: search.svg. ..ok
7: tech.svg. ..ok
8: vr.svg. ..ok

の用にメッセージが表示され Inkscape を起動する事なく *.eps, *.pdf が作 成されます。もう一度やり直したいときは

rm *.{eps,pdf}

としたあとに

./any.sh

とします。