最終更新:2018-03-27 (火) 01:11:25 (232d)

チュートリアル

チュートリアル/図の張り込み

図の張り込みを簡略化するためのマクロ

% benri.sty を提供します.
\ProvidesPackage{benri}[2014/04/22 v1.0 Benri package by Thor]
%
% Dvipdfmx
\ifx\kanjiskip\@undefined\else
  \usepackage{atbegshi}
  \ifx\ucs\undefined
    \ifnum 42146=\euc"A4A2
      % UTF-8 化された TeX であっても内部文字コードが EUC であれば
      % このままの記述を解釈させるべきになります.
      \AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}}
    \else
      % Windows などの Shift-JIS 系の設定になります.
      \AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}}
    \fi
  \else
    % 内部文字コードが Unicode の場合の設定になります.
    \AtBeginShipoutFirst{\special{pdf:tounicode UTF8-UTF16}}
  \fi
\fi
%
% 必要となるパッケージ
% 書体
\IfFileExists{type1cm.sty}{\usepackage{type1cm}}{}
% 図
\usepackage{graphicx}
% 表
\usepackage{array}
\usepackage{dcolumn}
\usepackage{delarray}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{multicol}
\usepackage{booktabs}
\usepackage{hhline}
% 箇条書
\usepackage{enumerate}
% 段落
\usepackage{setspace}
\usepackage{verbatim}
%\usepackage{indent}
% 数式
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amscd}
\usepackage{amsxtra}
\usepackage{theorem}
\usepackage{bm}
% URL
\usepackage[obeyspaces,spaces]{url}
% 枠・ボックス
\usepackage{fancybox}
% 計算
\usepackage{calc}
\usepackage{ifthen}
%
% 真偽値 |\ifdraft| がない時は追加
\newif \ifdraft \relax
\DeclareOption{draft}{\drafttrue \setlength\overfullrule{5pt}}
\DeclareOption{final}{\draftfalse \setlength\overfullrule{0pt}}
\ExecuteOptions{final}
\ProcessOptions\relax
%  
% ドラフト段階だけラベルを表示
\ifdraft
  \usepackage{showlabels}%
\fi
%
% 相互参照に関わる命令
\newcommand*\PreSectionName{}% or {\S}
\newcommand*\PostSectionName{節}% or {}
\newcommand*\chaplab[1]{\label{chap:#1}}%           章のラベル
\newcommand*\chapref[1]{\prechaptername \ref{chap:#1}%章の参照
   \postchaptername}%
\newcommand*\seclab[1]{\label{sec:#1}}%             節のラベル
\newcommand*\secref[1]{\PreSectionName \ref{sec:#1}%節の参照
   \PostSectionName}%
\newcommand*\figlab[1]{\label{fig:#1}}%             図のラベル
\newcommand*\figref[1]{\figurename \ref{fig:#1}}%   図の参照
\newcommand*\tablab[1]{\label{tab:#1}}%             表のラベル
\newcommand*\tabref[1]{\tablename \ref{tab:#1}}%    表の参照
\newcommand*\equlab[1]{\label{equ:#1}}%             式のラベル
\newcommand*\equref[1]{式 (\ref{equ:#1})}%          式の参照
\newcommand*\applab[1]{\label{app:#1}}%             付録のラベル
\newcommand*\appref[1]{\appendixname \ref{app:#1}}% 付録の参照
%
% naraberu 環境:画像を並べるための環境です
% #1 := 並べる画像の数
% 
% |\aki| : 画像のあいだに適切な空白を挿入します.
% |\img[<図見出し>]{<ファイル名>}| : 画像を張り込みます.
% ラベルは |\img[D. E. Knuth の肖像\figlab{DEK}]{DEK.eps}|
% のように挿入すると上手くいくと思います.
%
% |\parbox| を使っていますので,並べる画像の
% 個数に応じて適切な幅 |\img@width| を指定します.
% |\@tempdima := (linewidth/#1) - 0.5zw| を計算します.
% 
% \begin{example}
% \begin{figure}[htbp]
%   \begin{naraberu}{3}
%      \img[見出し\label{fig:}]{file2-1.pdf}\aki% 空きを設ける
%      \img[見出し\label{fig:}]{file2-2.pdf}\aki% 空きを設ける
%      \img[見出し\label{fig:}]{file2-3.pdf}
%   \end{naraberu}
% \end{figure}
% \end{example}
% 
% \begin{example}
% \begin{figure}[htbp]
%   \begin{naraberu}{2}
%     \img{\imgname}%[(a) 初期値 $k=0$]\aki
%     \aki
%     \img{\imgname}%[(b) 初期値 $k=0$]
%   \end{naraberu}
%   \caption{見出し\label{fig:hoge}}
% \end{figure}
% \end{example}
%
\ifx \abovecaptionskip \@ifundefined
   \newlength \abovecaptionskip
\fi
\ifx \belowcaptionskip \@ifundefined
   \newlength \belowcaptionskip
\fi
% 図番号と図見出しのあいだの空き
\newlength \fignumcaptionskip
\setlength \fignumcaptionskip {1zw}
% 図見出しの前の垂直方向の空き
\setlength \abovecaptionskip {5\p@}
% 図見出しの後の垂直方向の空き
\setlength \belowcaptionskip {5\p@}
% \@makecaption を再定義 |\fignumcaptionskip| を使うように
\long \def \@makecaption#1#2{{%
  % #1 := <図番号>
  % #2 := <図見出し>
  \small % 図見出しの書体のサイズは一段階小さく
  % 左側の水平方向の余白
  \advance \leftskip  .0628\linewidth
  % 右側の水平方向の空き
  \advance \rightskip .0628\linewidth
  % 見出しの前の垂直方向の空き
  \vskip \abovecaptionskip
  % これが実際の見出しの要素になる
  \sbox \@tempboxa{%
    % 図番号と図見出しのあいだには |\fignumcaptionskip| の空き
    #1\hskip\fignumcaptionskip\relax #2}%
  \ifdim \wd\@tempboxa <\hsize \centering \fi
  #1\hskip \fignumcaptionskip \relax #2\par
  % 見出しの後の垂直方向の空き
  \vskip \belowcaptionskip}%
}
%
% 現在の画像が何枚かを調べるためのカウンタ
%\newcounter{numofimg}
%
\newenvironment{図並べ}[1]{%
  % 画像の数
  %\setcounter{numofimg}{#1}%
  % 保険
  \ignorespacesafterend
  % 図並べ環境では図見出しと図が離れすぎないように
  \abovecaptionskip = 0pt 
  % 図番号と図見出しのあいだも少し狭くする
  \fignumcaptionskip = .75\fignumcaptionskip
  % 図を挿入するための幅を計算
  \@tempdima = \linewidth
  \divide \@tempdima #1
  \advance \@tempdima -.5zw
  % 結果は |\img@width| に格納
  \edef\img@width{\@tempdima}%
  % 水平方向の空きのための命令
  \let \空き = \hfil
  % 続けざまに複数行で図を並べる時の空き
  \def\@narabe@par{\par \vskip \belowcaptionskip}%
  % |\\| 命令を書き換える
  \let \\   = \@narabe@par
  % |\img| 命令を定義する
  \def\図{\@ifnextchar[%]
     {\@img}{\@@img}}%
  % 先頭に任意引数がある時は番号付き済だし
  \def\@img[##1]##2{\parbox{\img@width}{\centering
                 \includegraphics[width=\linewidth]{##2}%
                \caption{##1}}}%
  % ファイル名後の任意引数を評価する
  \def\@@img##1{\@ifnextchar[%]
     {\@@@img##1}{\@@@img##1[\@empty]}}%
  % 最後に任意引数がある時はそれぞ図の下部に配置する
  \def\@@@img##1[##2]{%
      \parbox{\img@width}{\centering
         \includegraphics[width=\linewidth]{##1}%
         % 図の下に説明をつけるときはちょっと上に食い込ませる
         \ifx##2\@empty \else \par \vskip-.2\cvs{##2}\fi}%
  }%
}{}
% |\img[<オプション>]{<ファイル名>}{<図見出し>}|
% 適当に画像を読み込むための命令です.
\def\図{%
   % アスタリスクなし
   \def\@@img[##1]##2##3{% 
      \begin{figure}[htbp]%
         \centering \includegraphics[##1]{##2}%
         \caption{##3}%
      \end{figure}%
   }%
   % アスタリスク付き
   \def\@@simg[##1]##2##3{% 
      \begin{figure*}[tbh]%
         \centering \includegraphics[##1]{##2}%
         \caption{##3}%
      \end{figure*}%
   }%
   % |\includegraphics| の読み込みオプションを判別する.
   % もし,何も指定されていなければ |width=\linewidth|
   % を代入する.
   \def\@img{\@ifnextchar[%]
      {\@@img}{\@@img[width=\linewidth]}}%
   \def\@simg{\@ifnextchar[%]
      {\@@simg}{\@@simg[width=\linewidth]}}%
   % アスタリスクの有無により処理内容を分ける
   \@ifstar{\@simg}{\@img}%
}
%
% \begin{example}
% \begin{mytable}{<見出し>}{<ラベル>}{<列指定子>} 
%   <内容> 
% \end{mytable}
% \end{example}
\newenvironment{mytable}[3]{%
  \begin{table}%
    \begin{center}%
      \caption{#1}\tablab{#2}%
      \begin{tabular}{#3}%
      \toprule}{%
      \bottomrule
      \end{tabular}%
   \end{center}%
  \end{table}%
}
%
%
% 単位を出力する時にはいかなる時でも立体 |\U| 
\newcommand*\U[1]{\ensuremath{\,\mathrm{#1}}}
%
% 特殊記号を出力するために
% 
\let \lb = \@charlb
\let \rb = \@charrb
\let \bs = \@backslashchar
\let \vs = \textvisiblespace
%
% indentation 環境は左右の余白を調整するための環境です.
% 
% \begin{example} 
% \begin{indentation}{<左空き>}{<右空き>}
% <段落要素>
% \end{indentation}
% \end{example}
%
\ifx \indentation \@undefined
\newenvironment{indentation}[2]%
{%
  \par
  \setlength{\leftmargin}{#1}%
  \setlength{\rightmargin}{#2}%
  \advance\linewidth -\leftmargin
  \advance\linewidth -\rightmargin
  \advance\@totalleftmargin\leftmargin
  \@setpar{{\@@par}}%
  \parshape 1 \@totalleftmargin \linewidth
  \ignorespaces
}%
{\par}
\fi
%
\endinput

使用例

\documentclass[draft,uplatex,dvipdfmx,twocolumn]{jsarticle}
\usepackage{benri}
\newcommand*\MOJI{\noindent
  ■□□□□◇□□□□■□□□□◇□□□□%
  ■□□□□◇□□□□■□□□\par}
\newcommand*\DAN{■□□□□◇□□□□■□□□□◇□□□□%
  ■□□□□◇□□□□■□□□\par}
\newcommand*\DANDAN{\noindent 
  ■□□□□◇□□□□■□□□□◇□□□□%
  ■□□□□◇□□□□■□□□○○○\par}
\def\XX{overlay1.pdf}
%
\begin{document}
\MOJI\MOJI\MOJI\DAN\DANDAN
\begin{figure}[htbp]
\begin{図並べ}{3}
\空き
  \図{\XX}\空き
  \図{\XX}\空き
  \図{\XX}%
\空き
\end{図並べ}
\end{figure}
\MOJI\MOJI\MOJI\DAN\DANDAN
\begin{figure}[htbp]
\begin{図並べ}{3}
  \図[本醸造]{\XX}\空き
  \図[大吟醸]{\XX}\空き
  \図[清酒]{\XX}\\
  \図[本醸造]{\XX}\空き
  \図[大吟醸]{\XX}\空き
  \図[清酒]{\XX}
\end{図並べ}
\end{figure}
\MOJI\MOJI\MOJI\DAN\DANDAN
\MOJI\MOJI\MOJI\DAN\DANDAN

\図{\XX}{サンプル\figlab{sample}}
\MOJI\MOJI\MOJI\DAN\DANDAN
\図*{\XX}{サンプル2\figlab{samle2}}

\begin{figure}[htbp]
  \begin{図並べ}{2}
    \図{\XX}[(a) 初期値 $k=0$]\空き
    \図{\XX}[(b) 初期値 $k=1$]
  \end{図並べ}
  \caption{見出し\figlab{hoge}}
\end{figure}

\begin{figure}[htbp]
  \begin{図並べ}{2}
    \図{\XX}[(a) 初期値 $k=0$]\空き
    \図{\XX}[(b) 初期値 $k=1$]\\
    \図{\XX}[(c) 初期値 $k=2$]\空き
    \図{\XX}[(d) 初期値 $k=3$]
  \end{図並べ}
  \caption{見出し\figlab{hoge2}}
\end{figure}
\MOJI\MOJI\MOJI\DAN\DANDAN
\begin{figure}[htbp]
  \begin{図並べ}{2}
    \図[初期値 $k=0$\figlab{k1}]{\XX}\空き
    \図[初期値 $k=1$\figlab{k2}]{\XX}\\
    \図[初期値 $k=2$\figlab{k3}]{\XX}\空き
    \図[初期値 $k=3$\figlab{k4}]{\XX}
  \end{図並べ}
\end{figure}
\end{document}