TeXのスタイル改造など

テキスト→TeXのスクリプトで呻いていた懸案事項を順番に解決していった.

章を右頁(縦書きだと偶数ページ)起こし

コレ,ふと見た『続LaTeX2ε階梯・縦組編』62ページに\cleardoublepageはLaTeX2εでは偶数起こしになる,と書いてあり,おや?と気がついた.

だったら,右から始まらないのってLaTeX2εのせいじゃないよなあ.ってことは,読み込んでるbunko.styのほうか!

そこで,bunko.styソースの方を見たら,下の方に% 縦組みの場合も奇数ページ起こしという所があったので,コメントアウトしたら,見事に右ページ起こしになりました.

が,結局,空白ページがもったいなくて,openanyにしたという.

目次ページのデザイン

bunko.styのデフォルトの目次はこんな感じ.

版面の一番上に章の名前,ページ番号は版面の一番下.

どうも縦書きだと随分間延びして見える.

章タイトルとページ番号と間を詰めたらいいかなと思ったけど,考えてみたら,1ページに7章までしか入らないってずいぶんもったいない.それで,最初,2段組にしたらどうだろうと\twocolumnと書いてみたりしたんだが,2段になってくれない.\tableofcontentsの方の定義とバッティングしてるのかなあ.

で,はたと,ここだけ横組みってのもいいな,と思い,minipage環境を使ってみることにする.組んでみたらうまくいったんだけど,どうにも行間が若干広くて,これでも12章までぐらいしかきれいに入らない.それに,このページにノンブルが入っていると,章ごとのページ番号も並ぶのでなんだか収まりが悪い.

それで,結局,以下のようにしました.

まず,プリアンブルに行間を変えるための新しい環境を定義します.

%一部だけ行間を変えるための新しい環境
\newenvironment{minilinespace}{ \baselineskip = 1mm }

で,目次の所は,

\begin{minipage}<y>[b]{5cm} %目次だけ横組み
\begin{minilinespace}
\tableofcontents
\thispagestyle{empty}
\end{minilinespace}
\end{minipage}

\tableofcontentsにもページスタイルの定義があるので,\thispagestyle{empty}は,その直後に置かないと効いてくれません.(\tableofcontentsの前に置いてもノンブルが出てしまう)

そうやって,目次を出力.

5cm幅に横書きで目次が出力されました.

なかなかいいんでない?

\rensujiの後の空白制御

TeXでは,「!」や「?」の後には自動で文字との間に空きが入る.ところが,\rensuji{!!}などで繋がったエクスラメーションマークを半角文字・縦向きに回転させると,そういうことを自動でやってくれない.

それで,最初,kinsokuファイルに書き足せばいいのかなあと思ったんですが,kinsokuは,どうも1字だけを指定するものらしい.

それに,考えてみると,\rensujiを使っているからってかならずしも記号ではないわけで,そういうときは次の文字との間が空くと困るよなあ.

というわけで,結局,TeXソースを作るときに該当するところに全角空白(\quad)を入れることにした.

これはテキスト→TeXソースのRubyスクリプトの記号をrensujiにしているところを改造することで対処した.

if line =~ /[?!][?!]/ #?!のつながりは,半角にして並べる
  line.gsub!(/([?!])([?!])([^、-◯])/){"\\rensuji{" +to_single($1)+to_single($2)+"}\\quad "+$3} #次の文字との間に1文字空白
  line.gsub!(/([?!])([?!])([、-◯])/){"\\rensuji{" +to_single($1)+to_single($2)+"}"+$3} #次の文字が記号の時は空白を入れない
end

TeXソースで入りすぎている空行の制御

別に実害は無いので趣味だけど,Rubyスクリプトをちょっちいじって,空行がいつも入るのを直してみた.

まず,空行を入れるかどうか(改行1回にするか2回にするか)を判別するフラグを作る.

br_f = 0 #ソースの空行を制御するためのカウンタ(段落の時だけ改行を2つ入れる)

後は,\begin{...}だけ入れたとか,\chapter{...}だけ書いたとかの処理をしたところにbr_f = 1を書き足し,最後に

if br_f == 1
  outputfile.print line + "\n" #文章の段落でないときは改行記号1つ。
  br_f = 0
else
  outputfile.print line + "\n\n" #他は段落なので改行記号2つ。
end

で処理終了.

あ~,すっきり.

日時: 2008年7月 6日 | PC/Web > Ruby |

コメントを投稿

(空欄でもかまいません)

(メールアドレスは管理人に通知されますが,Web上には表示されません)

Powered by Movable Type