Closed tkurita closed 3 years ago
jlreq.cls内部での\subsubsection
は一行取りで定義されていますので,複数行になるとはみ出てしまいます.なので,そのような箇所が文書内にある場合は,\subsection
を\RenewBlockHeading
や\ModifyHeading
で定義し直してはみ出ないようにされるとよいかと思います.
なお,内部マクロをいじればはみ出る場合に行取りを動的に変更することは可能です.ただし,このようなことが通常行われるのかは自分にはわかりません.以下は行取りを担当しているマクロ\jlreq@BlockHeading@start@gyodori
を改変した例です.jlreqのアップデートに伴い機能しなくなる可能性が当然あります.
\makeatletter
\long\def\jlreq@BlockHeading@start@gyodori#1#2#3#4{\par{%
\setbox\jlreq@tempboxa=\vbox{#4}%
\jlreq@tempskipa=0pt
\jlreq@tempskipb=0pt
\jlreq@tempskipc=0pt
\jlreq@BlockHeading@start@analyzespace#1:\jlreq@endmark
\let\jlreq@maeakitype=\jlreq@resulta
\let\jlreq@maeaki=\jlreq@resultb
\jlreq@BlockHeading@start@analyzespace#2:\jlreq@endmark
\let\jlreq@ushiroakitype=\jlreq@resulta
\let\jlreq@ushiroaki=\jlreq@resultb
\def\jlreq@lines{#3}%
\ifx r\jlreq@maeakitype\ifx r\jlreq@ushiroakitype\def\jlreq@lines{}\fi\fi
\setbox\jlreq@tempboxb=\hbox{阿}%
%%%%%%%%%%%%%%%%%%%%%%挿入
\ifdim\dimexpr\ht\jlreq@tempboxa + \dp\jlreq@tempboxa\relax > \dimexpr\jlreq@lines \baselineskip\relax
\jlreq@tempdima=\dimexpr\ht\jlreq@tempboxa + \dp\jlreq@tempboxa + \baselineskip\relax
\divide\jlreq@tempdima by \baselineskip
\edef\jlreq@lines{\the\numexpr\jlreq@tempdima\relax}%
\fi
%%%%%%%%%%%%%%%%%%%%%%
\ifx\jlreq@lines\@empty
\ifx\jlreq@maeaki\@empty\else
\ifx a\jlreq@maeakitype
\jlreq@tempskipc=\glueexpr\jlreq@maeaki\relax
\else
\jlreq@tempskipa=\glueexpr\jlreq@maeaki\relax
\fi
\fi
\ifx\jlreq@ushiroaki\@empty\else
\jlreq@tempskipb=\glueexpr\jlreq@ushiroaki\relax
\fi
\else
% #3 -> \jlreq@lines
\jlreq@tempdima=\glueexpr(\jlreq@lines\baselineskip - \baselineskip - \ht\jlreq@tempboxa - \dp\jlreq@tempboxa)\relax
\ifx\jlreq@maeakitype\@empty
\jlreq@tempskipa=\glueexpr(\jlreq@tempdima + \dp\jlreq@tempboxb - \ht\jlreq@tempboxb)/2\relax
\else
\ifx a\jlreq@maeakitype
\jlreq@tempskipa=\glueexpr(\jlreq@tempdima + \dp\jlreq@tempboxb - \ht\jlreq@tempboxb)/2\relax
\jlreq@tempskipc=\glueexpr\jlreq@maeaki\relax
\fi
\ifx s\jlreq@maeakitype
\jlreq@tempskipa=\glueexpr(\jlreq@tempdima + \dp\jlreq@tempboxb - \ht\jlreq@tempboxb)/2 + \jlreq@maeaki\relax
\jlreq@tempdima=\dimexpr\jlreq@tempdima + \jlreq@maeaki\relax
\fi
\ifx r\jlreq@maeakitype
\jlreq@tempskipa=\glueexpr\jlreq@maeaki\relax
\jlreq@tempdima=\dimexpr\jlreq@tempdima + \baselineskip - \dp\jlreq@tempboxb\relax
\fi
\fi
\ifx\jlreq@ushiroakitype\@empty
\jlreq@tempskipb=\glueexpr\jlreq@tempdima - \jlreq@tempskipa\relax
\else
\ifx a\jlreq@ushiroakitype
\jlreq@tempskipb=\glueexpr\jlreq@tempdima - \jlreq@tempskipa + \jlreq@ushiroaki\relax
\fi
\ifx r\jlreq@ushiroakitype
\jlreq@tempskipb=\glueexpr\jlreq@ushiroaki\relax
\jlreq@tempskipa=\glueexpr\jlreq@tempdima - \jlreq@tempskipb + \baselineskip - \ht\jlreq@tempboxb\relax
\fi
\fi
\fi
\jlreq@ifgluezero\jlreq@tempskipc{}{\vskip\jlreq@tempskipc\relax}%
\ifx r\jlreq@maeakitype\prevdepth=-1000pt\fi
\jlreq@tempdimb=\ht\jlreq@tempboxa
\jlreq@tempdimc=\dp\jlreq@tempboxa
\setbox\jlreq@tempboxa=\vbox{%
\jlreq@ifgluezero\jlreq@tempskipa{}{\vskip\jlreq@tempskipa}%
\unvbox\jlreq@tempboxa
}%
\ifx\jlreq@lines\@empty
\dp\jlreq@tempboxa=\dimexpr\dp\jlreq@tempboxa + \ht\jlreq@tempboxa - \jlreq@tempdimb\relax
\ht\jlreq@tempboxa=\jlreq@tempdimb
\box\jlreq@tempboxa
\ifx r\jlreq@ushiroakitype\prevdepth=-1000pt \else\prevdepth=\jlreq@tempdimc\fi
\else
\dp\jlreq@tempboxa=\dimexpr\dp\jlreq@tempboxa + \ht\jlreq@tempboxa\relax
\ht\jlreq@tempboxa=0pt
\box\jlreq@tempboxa
\ifx r\jlreq@ushiroakitype\prevdepth=-1000pt \else\prevdepth=0pt \fi
\fi
\nobreak
\jlreq@ifgluezero\jlreq@tempskipb{}{\vskip\jlreq@tempskipb}%
\edef\jlreq@do{%
\ifdim\parskip=0pt \else
\unexpanded{\def\jlreq@parhook@gyodori}{%
\noexpand\parskip=\the\parskip
\unexpanded{\def\jlreq@parhook@gyodori{}}%
}%
\unexpanded{\parskip=0pt}%
\fi
}%
\expandafter}\jlreq@do
}
\makeatother
コメントありがとうございます。ujarticle をもっぱら使っていますが、ujarticle では見出しが複数行にわたっても前後の文章と重なることはありません。固定するより、そのような振る舞いの方が便利ありがたいと感じます。
行取りすることにこだわらないということでしたら,before_spaceとafter_spaceを\subsubsection
に設定してやれば,上下に必ずこれらで指定した空きが入りますので,はみ出すことはなくなると思います.(なお,\subsubsection
は別行見出しとして実装されています.)または,ujarticleの\subsubsection
の定義をそのままもってくればujarticleのものと同じ挙動の見出しが実現できます.
コメントありがとうございます。「before_spaceとafter_spaceを\subsubsectionに設定」するにはどうすれば良いのでしょうか?どうにもやり方が見つからず、ヒントをいただければ。
例えば\RenewBlockHeading{subsubsection}{3}{before_space=10pt,after_space=10pt}
または\ModifyHeading{subsubsection}{before_space=10pt,after_space=10pt}
のようにしてください.設定は\NewBlockHeading
が受け付けるものと同じものを受け付けます.詳細はREADME-ja.mdをご覧ください.
ありがとうございます。\ModifyHeading の方は、効果がありませんでした。 \RenewBlockHeadingだと、前後の文章とかさらないようになりましたが、すべての属性を自分で設定しなければならないのが、少々面倒でしょうか。
前に設定されていたbefore_lines
が生き残ってしまっているようです.後ほど直しておきます.とりあえずは\ModifyHeading{subsubsection}{before_lines={},before_space=10pt}
と打ち消しておけば有効になるかとは思います.
ありがとうございます。所望の動作が得られました。
例えば、
\documentclass[uplatex,dvipdfmx]{jlreq} \begin{document} 本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文 \subsubsection{サブサブセクション サブサブセクション サブサブセクション サブサブセクション サブサブセクション サブサブセクション サブサブセクション サブサブセクション サブサブセクション サブサブセクション サブサブセクション サブサブセクション サブサブセクション} 本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文 \end{document}
のようなコードの場合、サブセクションの内容が前後の本文に重なります。