文書の過去の版を表示しています。
Latex関係のメモ
RmarkdownからLatexを経由してPDFを作成する際に必要でしらべたLatexのTips。本格的にちゃんと勉強したいが。。
主に困ったのが、余白関係。美しく組版するという目的からか、標準ではかなり余白が多めで図表を詰め込んだりできない。それらを解消する方法をまとめておく。スマートな方法とは言えない。また、直接Latexを書くわけではなく、Rmarkdownから制御しなければならないため、細かい指示ができない場合もあり、もどかしい。。
図表番号を節ごとに
詳細は追って調べる。 図表番号の区切り文字は「.」となる。それぞれの真ん中の行でフォーマットを設定しているので、これをいじれば好きなフォーマットで「図1-3」などに変更できる。
\makeatletter
\renewcommand{\theequation}{% 式番号の付け方
\thesection.\arabic{equation}}
\@addtoreset{equation}{section}
\renewcommand{\thefigure}{% 図番号の付け方
\thesection.\arabic{figure}}
\@addtoreset{figure}{section}
\renewcommand{\thetable}{% 表番号の付け方
\thesection.\arabic{table}}
\@addtoreset{table}{section}
\makeatother
改ページ
# とにかく改ページ。 \newpage # 未配置の図表を出力して改ページ \clearpage
余白
図と図の間などの余白。どれが効いているのかを調べる方法がよくわからない。色々調整してみて、反応するものをみて予想をつけた。
# 図と図の間
\setlength\floatsep{0pt}
# 本文と図の間
\setlength\textfloatsep{0pt}
# 本文の図
\setlength\intextsep{0pt}
# 図とキャプションの間
\setlength\abovecaptionskip{0pt}
Rmarkdown側のプリアンプルで定義すると、全ての図表に影響してまう。特定の場所に設定するには、
{
\setlength\abovecaptionskip{0pt}
図1
図2
}
のように中カッコでくくる必要があるが、Rmarkdownの本文中で中カッコを書いても、途中でエスケープされて、Latex的には文字としての中カッコがPDFに出力される。苦肉の策としてマクロを利用する方法を思いついた。
\newcommand{\setmargin}[1]{{\setlength\intextsep{4mm}#1}}
\setmargin{
図1
図2
}
こうすると、中カッコが単独で本文中に現れないので、特定範囲の図だけを対象に余白を調整できる。
図表とキャプションの間隔
図や表とキャプションとの間隔を決める。標準ではちょっと広すぎる場合がある。
\usepackage{caption}
\captionsetup[table]{skip=10pt}
\captionsetup[figure]{skip=10pt}
1ページあたりの図表の数
図表の余白を小さくしたり図自体を小さくしても、妙に余白ばかり大きくなって1ページあたりに図がつめこめなかったが、Latexでは図の配置は自動的に決められることが原則であるため、そのパラメータにひっかって思うように動かなかった。うまく組み立てれば洗練された文書を作れるが、やはり見た目から逆算することも多い。
主に引っかかっていたと思われる制限は、1ページ当たりのテキストの最小割合や1ページ当たりのfloat数など。これらを調整すると、図表を詰め込むことができる。
# ページ上部に入れられるfloatの数
\setcounter{topnumber}{2}
# 2段組みの場合
\setcounter{dbltopnumber}{2} % twocolumn時の⾴上部の最⼤float数
# ページ下部に入れられるfloatの数
\setcounter{bottomnumber}{1}
# 1ページの最大float数
\setcounter{totalnumber}{3}
# ページ上部のfloatの最大割合
\renewcommand\topfraction{.7}
# 2段組みの場合
\renewcommand\dbltopfraction{.7}
# ページ下部のfloatの最大割合
\renewcommand\bottomfraction{.3}
# 1ページあたりのテキスト部分の最小割合
\renewcommand\textfraction{.2}
# floatだけのページの最小割合
\renewcommand\floatpagefraction{.5}
# 2段組みの場合
\renewcommand\dblfloatpagefraction{.5}
floatのみのページの図表配置
図だけのページの配置は専用のパラメータが設定されている。前のページから押し出されて図がはみ出し、次のページに図が1枚だけになってしまった場合など。図に続いて文字などがあると図は上詰めで配置されていくが、文書の最後やclearpageなどで残った図を張り付けてから改ページが行われる場合などに起こることが多い気がする。
標準では以下の設定になっているようだ。
\@fptop = 0pt + 1fil \@fpsep = 8pt + 2fil \@fpbot = 0pt + 1fil
@fptopはフロートのみのページの上部の余白。余白は0だが1filでページの上側が伸び縮する予約で調整される。下の予約や図と図の間の余白との関係で相対的に決まる。標準では@fpbotも同じ設定なので、上下均等に余白が作られる。したがって、全体として図が縦方向の中央に配置される。上詰めしたければ@fptopを0ptのみにすれば、下の伸縮可能な余白が上まで上がってきて、上詰めになる。
@fpsepは図が2枚以上ある場合の図と図の間の配置設定。標準だと、図と図の間の余白が2filなので、相対的にやや広くなって全体に均等に配置されるようだ。すべての図を上詰めにするなら、@fpsepも2filを取り除けばよい。0ptにすると図と図の間隔が狭くなりすぎるため、必要に応じて適宜調整。
文書全体で調整するにはプリアンブルに以下を追加する。
\makeatletter
\setlength{\@fptop}{0pt}
\setlength{\@fpsep}{8pt}
\setlength{\@fpbot}{0pt plus 1fil}
\makeatother
見出しの余白
詳細はもう少し調査。見出し、小見出しの上下の余白を調整。
\usepackage[compact]{titlesec}
\titlespacing*{\section}{0pt}{*0}{0pt}
\titlespacing*{\subsection}{0pt}{*0}{0pt}
ページの余白
しばしば見かけるのは、geometryを利用するものだが、Rmarkdownからxelatexを使う場合、geometryがうまく機能せずエラーになる。そこで、以下のようにしてページの余白を調整。意味はもう少し調査。
\setpagelayout * {margin=20mm}
行間
標準のスタイルでは行間もかなり広い。論文や雑誌記事ならよいが、ワープロ的に使うにはちょっと広すぎる。
\renewcommand{\baselinestretch}{0.9}
ページの一部だけを対象にする場合は
\begin{spacing}{倍率}
文章文章文章文章文章
\end{spacing}
