TeXやLaTeXについての覚え書きをまとめてみました。
出来上がりの用紙サイズ(例えばPDF出力する場合)を自動で設定するには、プリアンブルで以下のように設定します。
\AtBeginDvi{\special{papersize=\the\paperwidth,\the\paperheight}}
なお、 奥村先生のpLaTeX2e新ドキュメントクラスではpapersizeが実装されていますので、クラスファイルのオプションで指定して下さい。
\documentclass[a5paper,papersize]{jsarticle}
%% 以下省略
奥村先生のpLaTeX2e新ドキュメントクラスで10pt以外のオプションを指定しgraphicx.styを使用すると用紙のサイズが狂うようです。
回避するためにはnosetpagesizeオプションを指定します。
最新版では修正されているようです。
\usepackage[dvipdfmx,nosetpagesize]{graphicx}%% 常用するデバイスと共に指定
目次で章節の表題を表示・非表示するにはtocdepthカウンタ値を設定します。 例えば、プリアンブルで以下のように設定します。
\setcounter{tocdepth}{1}%% 目次では\section の表題まで出す
本文で章節番号を表示・非表示するにはsecnumdepthカウンタ値を設定します。
\setcounter{secnumdepth}{3}%% 本文では\subsubsection まで章節番号を出す
具体的なカウンタ値は以下のとおりです。
| カウンタ値 | 備考 | |
|---|---|---|
| \part | -1 | |
| \chapter | 0 | (js)articleクラスには無い |
| \section | 1 | |
| \subsection | 2 | |
| \subsubsection | 3 | |
| \paragraph | 4 | |
| \subparagraph | 5 |
LaTeX2eでは版面を構成する様々なパラメータがあります。 このパラメータの値を調整すれば、お望みのレイアウトを得ることが出来ます。 ただし、版面のパラメータは他のパラメータと密接に関係していますので、その相互関係を考慮に入れる必要があります。
縦組の場合には、(1)(2)(3)(4)は共通ですが、それ以外の幾つかのパラメータで向きが変わってきます。
以下に雛形(その1)を示します。
\documentclass[a4paper,dvipdfmx]{jsarticle}%% 常用するデバイスはオプションで指定する
\setlength{\topmargin}{-1truein}%% \topmarignを-1インチにする
\addtolength{\topmargin}{15truemm}%% 上余白15mmとする
\setlength{\headheight}{0pt}%% ヘッダーは使わないので 0pt
\setlength\headsep{0pt}%% 同上
\setlength{\textheight}{\paperheight}%% テキストの高さを紙の高さにしておいて
\addtolength{\textheight}{-30truemm}%% 30mmひいて下余白15mm とする
\setlength{\oddsidemargin}{-1truein}%% \oddsidemargnを-1インチにする
\addtolength{\oddsidemargin}{10truemm}% 左余白10mmとする
\setlength{\textwidth}{\paperwidth}%% テキストの幅を紙の幅にしておいて
\addtolength{\textwidth}{-20truemm}%% 20mmひいて右余白10mm とする
\setlength{\evensidemargin}{\oddsidemargin}%% \evensidemargnも\oddsidemarginと同じ
\pagestyle{empty}%% ページ番号は表示しない
雛形(その2)を示します。
\documentclass[a4paper,twoside,dvipdfmx]{jsarticle}%% 常用するデバイスはオプションで指定する
\setlength{\topmargin}{-1truein}%% \topmarignを-1インチにする
\addtolength{\topmargin}{.15\paperheight}%% 上余白は紙の高さ15パーセントとする
\setlength{\headheight}{10truemm}%% ヘッダーの高さは10mmt
\setlength\headsep{5truemm}%% ヘッダーと本文の空きは5mm
\addtolength{\topmargin}{-15truemm}%% \topmarginからヘッダー等の高さを引くので
% ヘッダーは(見かけ上)上余白の中に
\setlength{\textheight}{.75\paperheight}%% テキストの高さは紙の高さ75パーセントとするので
% 下余白は紙の高さ10パーセント(15+75+10=100)となる
%%% 奇数ページ
\setlength{\oddsidemargin}{-1truein}%% \oddsidemargnを-1インチにする
\addtolength{\oddsidemargin}{.12\paperwidth}% 左余白は紙の幅12パーセントとする
%%% 偶数ページ
\setlength{\evensidemargin}{-1truein}%% \oddsidemargnを-1インチにする
\addtolength{\evensidemargin}{.08\paperwidth}% 左余白は紙の幅8パーセントとする
\setlength{\textwidth}{.8\paperwidth}%% テキストの幅を紙の幅80パーセントにする
\setlength{\fullwidth}{\textwidth}%% ヘッダーの幅をテキストの幅と同じにする(jsclassesのみ)
\pagestyle{headings}%% ページ番号は下線付きヘッダーに表示
以下に雛形を示します。
% pLaTeX
\documentclass[b5paper,papersize,dvipdfmx]{jsbook}%% 常用するデバイスはオプションで指定する
%\documentclass[a4paper,dvipdfmx]{jreport}
%\documentclass[b5paper,papersize,dvipdfmx]{jsarticle}
\usepackage{makeidx}%% 索引用スタイルファイル
\makeindex%% 索引を作る宣言
\title{}%% 文書の表題
%\date{}%% 日付(コメントすると今日の日付)
\author{}%% 著者
\begin{document}
\frontmatter%% [js]bookクラスのみ、[j]report、[js]articleクラスには無い
\maketitle%% 表題の表示
\tableofcontents%% 目次
%\listoffigures%% 図目次
%\listoftables%% 表目次
\mainmatter%% [js]bookクラスのみ、[j]report、[js]articleクラスには無い
%\part{}%% 部(任意)
\chapter{}%% 章 ([js]article クラスには無い)
\section{}%% 節
索引\index{さくいん@索引}%% @の前に「読み」@の後に「漢字」を入れる
ホゲホゲ\index{ほげほげ}%%「漢字」不要なら読みのみ
hogehoge\index{hogehoge}%% 英数字も同様
\subsection{}%% 小節
\subsubsection{}%% 小々節
\paragraph{}%% 段落
\subparagraph{}%% 小段落
\bibliographystyle{jplain}%% 文献用スタイルの選択
\bibliography{foo,bar}%% 文献データベースファイルの選択
%\backmatter%% [js]bookクラスのみ、[j]report、[js]articleクラスには無い
\printindex%% 索引の出力
\end{document}
部分的に文書の余白を調整するにはindentパッケージを用いindentation環境を使います。
\usepackage{indent}
プリアンブルで上記のように指定し本文中で以下のようにします。 左右の余白量は長さを指定します。
\begin{indentatation}{左余白量}{右余白量}
余白を付けたい文章
\end{indentatation}
文書全体で行間を指定するにはプリアンブルで\baselinestretchを再定義します。
\renewcommand{\baselinestretch}{.9}%% 通常の文書は1に相当する
部分的に文書の行間を指定するにはsetspaceパッケージを用いspacing環境を使います。
\usepackage{setspace}
プリアンブルで上記のように指定し本文中で以下のようにします。
\begin{spacing}{.9}%% 通常の文書は1に相当する
行間を変えたい文章
\end{spacing}
齋藤さんのOTFパッケージを使用すれば様々な文字を出力できます。 プリアンブルで以下のように指定します。
\usepackage{otf}%% オプションも取れるが、ここでは省略
本文中で\ajMaru{引数}とします。 引数は0から100まです。
本文中で\CID{引数}とします。
引数はCID 10進数コードです。
または\UTF{引数}とします。
引数は16進数ユニコードです。
異体字ではありませんが、表示されていた文字が最終的に出力した際に使用されているフォントによって文字が変わってしまうことがあります。
この場合にも明示的に指定することで有効です。
丸数字の\ajMaru{1}や\ajMaru{69}に\ajMaru{100}などが使えます。
草\UTF{5f45} 剛 \qquad 内田 百\UTF{9592}
画面上では禰% PDF に出すと ネ爾 になってしまう
と出ていても変わってしまうので、
\CID{7769}% 示爾
とすると期待した文字が得られます。
以下に出力例を示します。
ほとんどOTFパッケージで出力出来るのですが、文字が見つからない場合に文字を部品として合成し出力することもあります。
\usepackage{graphicx}%% 常用するデバイスは\documentclassのオプションで指定
%% 文字パーツを変形させて左右に合成するコマンド(制御綴)
\newcommand{\LRkanji}[3][4]{% オプションは 3 4 5 のみ有効、デフォルトは 4
\ifnum #1<4% 4未満(3以下)なら
\scalebox{0.3}[1]{#2}\scalebox{0.7}[1]{#3}%
\else%
\ifnum #1=4% 4に等しいなら
\scalebox{0.4}[1]{#2}\scalebox{0.6}[1]{#3}%
\else%
\ifnum #1>4% 4を超える(5以上)なら
\scalebox{0.5}[1]{#2}\scalebox{0.5}[1]{#3}%
\fi\fi\fi}
%% 文字パーツを変形させて上下に合成するコマンド(制御綴)
\newcommand{\UBkanji}[2]{\raisebox{.47zh}[0pt]{\scalebox{1}[.49]{#1}}%
\hspace{-1zw}\scalebox{1}[.49]{#2}}
プリアンブルで上記のように定義して本文中で以下のようにします。
「示」と「爾」を合成(4対6の比率)して\LRkanji{示}{爾}とする。
韓国の囲碁棋士、李世\UBkanji{石}{乙}九段
以下に出力例を示します。
colorパッケージを用いれば色付きの文字が使えます。 (参考:>LaTeXグラフィックスコンパニオン:2000年、アスキー発行) プリアンブルで以下のように指定します。
\usepackage{color}%% 常用するデバイスは\documentclassのオプションで指定
本文中で\color[オプション]{引数}とすれば、それ以降の文字に色が付きます。 範囲を限局するために{と}で囲むか、\textcolor[オプション]{引数}{文字列}を用います。 文字列を囲んで背景に色を付けるには\colorbox[オプション]{引数}{文字列}とします。
オプションは以下のとおりで、それぞれ引数が異なります。
| オプション | 書式例 | 備考 |
|---|---|---|
| \color{引数} | 引数は「色の名前」 | |
| cmyk | \color[cmyk]{引数,引数,引数,引数} | 引数は4個で、それぞれ0~1の数値 |
| rgb | \color[rgb]{引数,引数,引数} | 引数は3個で、それぞれ0~1の数値 |
| gray | \color[gray]{引数} | 引数は0~1の数値:数値が大きくなると薄くなる |
| named | \color[named]{引数} | 引数は「色の名前」 |
オプションを指定しない場合には、black、white、red、green、blue、cyan、magenta、yellowの8色が用意されています。
namedオプションでは、以下の68色が用意されています。色と名前の一覧をPDFファイルにしました。
| GreenYellow | Yellow | Goldenrod | Dandelion |
| Apricot | Peach | Melon | YellowOrange |
| Orange | BurntOrange | Bittersweet | RedOrange |
| Mahogany | Maroon | BrickRed | Red |
| OrangeRed | RubineRed | WildStrawberry | Salmon |
| CarnationPink | Magenta | VioletRed | Rhodamine |
| Mulberry | RedViolet | Fuchsia | Lavender |
| Plum | Violet | RoyalPurple | BlueViolet |
| Thistle | Orchid | DarkOrchid | Purple |
| Periwinkle | CadetBlue | CornflowerBlue | MidnightBlue |
| NavyBlue | RoyalBlue | Blue | Cerulean |
| Cyan | ProcessBlue | SkyBlue | Turquoise |
| TealBlue | Aquamarine | BlueGreen | Emerald |
| JungleGreen | SeaGreen | Green | ForestGreen |
| PineGreen | LimeGreen | YellowGreen | SpringGreen |
| OliveGreen | RawSienna | Sepia | Brown |
| Tan | Gray | Black | White |
以下にLaTeXソースと出力例を示します。
ある夏の日、
{% ここから
\color[named]{Red}
真っ赤な猫が歩いている。
\colorbox[named]{Blue}{\textcolor{white}{青い犬}}が近寄ってきたので、
真っ赤な猫は\textcolor[named]{Cyan}{真っ青になって}逃げた。
}% ここまで
\textcolor[named]{Red}{真っ赤な猫}は、\textcolor[gray]{0.8}{屋根}まで
駆け上がったけれど、{\color{blue}青い犬}は\textcolor[rgb]{0,0.7,0.2}{何処か}
に行ってしまった。
通常はpxfontsパッケージを利用していますがTypeWriter体で数字の0の字形が逆スラッシュの入ったものになって都合が悪いのでフォントをcmttに変えます。プリアンブルで以下のように指定します。
\usepackage{pxfonts}
\renewcommand{\ttdefault}{cmtt}%% TypeWriter体のフォントをcmttに変更
\@captype を操作すれば、figure環境内で図の\captionを、table環境内で表の\captionを使うことが出来ます。プリアンブルで以下のように指定します。
\makeatletter%% プリアンブルで定義する場合は必須
\newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}}
\newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}}
\makeatother%% プリアンブルで定義する場合は必須
本文中で以下のように使います。
\begin{table}
% 実際の表は省略
\figcaption{table環境内で図のキャプション}
\end{table}
なお\figcaption・\tblcaptionはtable環境・figure環境など浮動体(フロート)の外でも使用できますから場所を固定したい図表の\captionに応用できます。
colortblパッケージを用いれば表組み(tabular環境)に色付けすることが出来ます。 (参考:LaTeXグラフィックスコンパニオン:2000年、アスキー発行) プリアンブルで以下のように指定します。
\usepackage{colortbl}%% 常用するデバイスは\documentclassのオプションで指定
tabular環境の要素で\columncolor[オプション]{引数}を指定すれば列に色を付けることが出来ます。
LaTeXソースと出力例を示します。
\begin{tabular}{l>{\columncolor[gray]{0.75}}ll}%% 2列目を薄いgrayに
吾輩は猫である & 猫 & 夏目漱石 \\
山月記 & 虎 & 中島 敦 \\
羅生門 & 鬼 & 芥川 龍之介\\
\end{tabular}
また、\multicolumnの応用で特定のセルだけや、\rowcolor[オプション]{引数}で特定の行に色を付けることも出来ます。
LaTeXソースと出力例を示します。
\begin{tabular}{ll}
吾輩は猫である &\multicolumn{1}{>{\columncolor[named]{Cyan}}l}{夏目漱石} \\%% このカラムのみCyanに
坊っちゃん & \\
\rowcolor[named]{Yellow}山月記 & 中島 敦 \\%% この行はYellowに
羅生門 & 芥川 龍之介\\<
\end{tabular}
表組み(tabular環境)でセル(カラム)を横に結合するには\multicolumn{結合するセルの数}{書式}{中身}で出来ますが、縦方向に結合するにはmultrowパッケージを使用します。 プリアンブルで以下のように指定するだけです。
\usepackage{multirow}%
具体的にはtabular環境で\multirow{結合するセルの数}*{中身}とします。この場合罫線はそのまま残りますので\cline{引数}で適宜調整が必要です。 また\multicolumnと組み合わせることでセルの書式(属性)も指定できます。\multicolumn{結合するセルの数}{書式}{\multirow{結合するセルの数}*{中身}}のように中に入れます。
tabularx環境でX(可変長セル)以外に定義してあると便利なカラム属性は以下のように指定します。 (参考:LaTeXコンパニオン:1998年、アスキー発行、pp133--134)
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}%% 可変長セルの右詰め
\newcolumntype{C}{>{\centering\arraybackslash}X}%% 可変長セルの中央揃え
番号付き箇条書き(enumerate環境)は、4段階まで入れ子に出来ます。 それぞれの番号はenumi、enumii、enumiii、enumivカウンタが用いられ\theenum?(番号)と\labelenum?(番号の体裁)が定義されておりpLaTeX2e新ドキュメントクラスのデフォルトは以下のとおりです。
| 第1階層 | \theenumi | \arabic{enumi} | \labelenumi | \theenumi. |
|---|---|---|---|---|
| 第2階層 | \theenumii | \alph{enumii} | \labelenumii | \inhibitglue(\theenumii)\inhibitglue |
| 第3階層 | \theenumiii | \roman{enumiii} | \labelenumiii | \theenumiii. |
| 第4階層 | \theenumiv | \Alph{enumiv} | \labelenumiv | \theenumiv. |
これらを再定義して変更することで体裁を変えられます。 番号付き箇条書き(第1階層)をOTFパッケージの丸数字にするには以下のようにします。
\renewcommand{\theenumi}{\ajLabel\ajMaru{enumi}}
\renewcommand{\labelenumi}{\theenumi}
enumerate環境の第2階層以下で\labelを付け\refで参照すると親階層の番号も表示されます。 これを表示させないようにするには\p@enumii等を再定義します。
\makeatletter%% プリアンブルで再定義する際は必須
\renewcommand{\p@enumii}{\empty}%% 第2階層
\renewcommand{\p@enumiii}{\empty}%% 第3階層
\renewcommand{\p@enumiv}{\empty}%% 第4階層
\makeatother%% プリアンブルで再定義する際は必須
プリアンブル等で以下のように再定義します。 なおpLaTeX2e新ドキュメントクラスでは既に行間は狭く設定されているので不要です。
\makeatletter%% プリアンブルで再定義する際は必須
\renewenvironment{enumerate}%% enumerate 環境を再定義
{\ifnum \@enumdepth >\thr@@\@toodeep\else%
\advance\@enumdepth\@ne
\edef\@enumctr{enum\romannumeral\the\@enumdepth}%
\list{\csname label\@enumctr\endcsname}{%
\iftdir
\ifnum \@listdepth=\@ne \topsep.5\normalbaselineskip
\else\topsep\z@\fi
% 元々ここにあった定義を...
\labelwidth1zw \labelsep.3zw
\ifnum \@enumdepth=\@ne \leftmargin1zw\relax
\else\leftmargin\leftskip\fi
\advance\leftmargin 1zw
\fi
\parskip\z@ \itemsep\z@ \parsep\z@% こちらに移動
\usecounter{\@enumctr}%
\def\makelabel##1{\hss\llap{##1}}}%
\fi}{\endlist}
\makeatother%% プリアンブルで再定義する際は必須
箇条書き(itemize環境)は、4段階まで入れ子に出来ます。 カウンタはありませんが記号が、それぞれ\labelitem?で定義されておりpLaTeX2e新ドキュメントクラスのデフォルトは以下のとおりです。
| 第1階層 | \labelitemi | \textbullet |
|---|---|---|
| 第2階層 | \labelitemii | \normalfont\bfseries \textendash |
| 第3階層 | \labelitemiii | \textasteriskcentered |
| 第4階層 | \labelitemiv | \textperiodcentered |
これらを再定義して変更することで体裁を変えられます。 たとえば箇条書きの第1階層を□にするには以下のようにします。
\renewcommand{\labelitemi}{□}
プリアンブル等で以下のように再定義します。 なおpLaTeX2e新ドキュメントクラスでは既に行間は狭く設定されているので不要です。
\makeatletter%% プリアンブルで再定義する際は必須
\renewenvironment{itemize}%% itemize 環境を再定義
{\ifnum \@itemdepth >\thr@@\@toodeep\else
\advance\@itemdepth\@ne
\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
\expandafter
\list{\csname \@itemitem\endcsname}{%
\iftdir
\ifnum \@listdepth=\@ne \topsep.5\normalbaselineskip
\else\topsep\z@\fi
% 元々ここにあった定義を...
\labelwidth1zw \labelsep.3zw
\ifnum \@itemdepth =\@ne \leftmargin1zw\relax
\else\leftmargin\leftskip\fi
\advance\leftmargin 1zw
\fi
\parskip\z@ \itemsep\z@ \parsep\z@% こちらに移動
\def\makelabel##1{\hss\llap{##1}}}%
\fi}{\endlist}
\makeatother%% プリアンブルで再定義する際は必須
プリアンブル等で以下のように再定義します。 なおpLaTeX2e新ドキュメントクラスでは既に行間は狭く設定されているので不要です。
\makeatletter%% プリアンブルで再定義する際は必須
\renewenvironment{description}%% description 環境を再定義
{\list{}{\labelwidth\z@ \itemindent-\leftmargin
\iftdir
\leftmargin\leftskip \advance\leftmargin3\Cwd
\rightmargin\rightskip
\labelsep=1zw% 元々ここにあった定義を...
\fi
\itemsep\z@% こちらに移動
\listparindent\z@ \topskip\z@ \parskip\z@ \partopsep\z@% こちらに移動
\let\makelabel\descriptionlabel}}{\endlist}
\makeatother%% プリアンブルで再定義する際は必須
ascmac.styの\keytop等がガタガタになるのをスムーズに描画するにはpict2eパッケージを併用します。プリアンブルで以下のように指定します。
\usepackage{pict2e}%% 常用するデバイスは\documentclassのオプションで指定
プリアンブル等で\@makechapterheadと\@makeschapterheadを以下のように再定義します。
\makeatletter%% プリアンブルで再定義する際は必須
\def\@makechapterhead#1{\hbox{}%
\vskip2\Cvs
{\parindent\z@
\raggedright% 左揃え(オリジナルの定義)
% \centering% 中央揃え
% \raggedleft% 右揃え
\normalfont\huge\sffamily\gtfamily%% フォントを変更する
\leavevmode
\ifnum \c@secnumdepth >\m@ne
\setlength\@tempdima{\linewidth}%
\if@mainmatter% ← report クラスの場合この行不要
\setbox\z@\hbox{\@chapapp\thechapter\@chappos\hskip1zw}%
\addtolength\@tempdima{-\wd\z@}%
\unhbox\z@\nobreak
\fi% ← report クラスの場合この行不要
\vtop{\hsize\@tempdima#1}%
\else
#1\relax
\fi}\nobreak\vskip3\Cvs}
%
\def\@makeschapterhead#1{\hbox{}%
\vskip2\Cvs
{\parindent\z@
\raggedright% 左揃え(オリジナルの定義)
% \centering% 中央揃え
% \raggedleft% 右揃え
\normalfont\huge\sffamily\gtfamily%% フォントを変更する
\leavevmode
\setlength\@tempdima{\linewidth}%
\vtop{\hsize\@tempdima#1}}\vskip3\Cvs}
\makeatother%% プリアンブルで再定義する際は必須
プリアンブル等で以下のように再定義します。 パラメータの意味はコメントを参考にして下さい。
\makeatletter%% プリアンブルで再定義する際は必須
\renewcommand{\section}{\@startsection{section}% #1 見出し
{1}% #2 見出しのレベル
{\z@}% #3 横組みの場合、見出し左の空き(インデント量)
{1.5\Cvs \@plus.5\Cvs \@minus.2\Cvs}% #4 見出し上の空き
{.5\Cvs \@plus.3\Cvs}% #5 見出し下の空き (負の値なら見出し後の空き)
{\normalfont\Large\sffamily\gtfamily}}% フォントを変更する: #6 見出しの属性
% {\centering\normalfont\Large\bfseries}}% 中央揃え
% {\raggedleft\normalfont\Large\bfseries}}% 右揃え
\makeatother%% プリアンブルで再定義する際は必須
小節(subsection)以下でも同様で、プリアンブル等で以下のように再定義します。
\makeatletter%% プリアンブルで再定義する際は必須
\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
{1.5\Cvs \@plus.5\Cvs \@minus.2\Cvs}%
{.5\Cvs \@plus.3\Cvs}%
{\normalfont\large\sffamily\gtfamily}}%% フォントを変更する
\makeatother%% プリアンブルで再定義する際は必須