Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

フロートのh指定で前後のアキが不均等になる #15

Open
yuw opened this issue Jul 14, 2016 · 7 comments
Open

フロートのh指定で前後のアキが不均等になる #15

yuw opened this issue Jul 14, 2016 · 7 comments

Comments

@yuw
Copy link

yuw commented Jul 14, 2016

次のようなコードでh指定した場合,オブジェクトの前後のアキが不均等になります.

\documentclass{jsarticle}
\begin{document}
■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□
\begin{figure}[h]
 \frame{\phantom{\rule{15\cHT}{15\cwd}}}
\end{figure}

■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□
\end{document}

期待する挙動は前後のアキが均等であることです.
単純には,@addtocurcolを次のように変更すればよいかと思います.

\def \@addtocurcol {%
   \@insertfalse
   \@setfloattypecounts
   \ifnum \@fpstype=8
   \else
     \ifnum \@fpstype=24
     \else
       \@flsettextmin
       \advance \@textmin \@textfloatsheight
       \@reqcolroom \@pageht
       \ifdim \@textmin>\@reqcolroom
         \@reqcolroom \@textmin
       \fi
       \advance \@reqcolroom \ht\@currbox
       \ifdim \@colroom>\@reqcolroom
         \@flsetnum \@colnum
         \ifnum \@colnum>\z@
           \@bitor\@currtype\@deferlist
           \if@test
           \else
             \@bitor\@currtype\@botlist
             \if@test
               \@addtobot
             \else
               \ifodd \count\@currbox
                 \advance \@reqcolroom \intextsep
                 \ifdim \@colroom>\@reqcolroom
                   \global \advance \@colnum \m@ne
                   \global \advance \@textfloatsheight \ht\@currbox
                   \global \advance \@textfloatsheight 2\intextsep
                   \@cons \@midlist \@currbox
                   \if@nobreak
                     \nobreak
                     \@nobreakfalse
                     \everypar{}%
                   \else
                     \addpenalty \interlinepenalty
                   \fi
                   \vskip \intextsep
                   \box\@currbox
                   \penalty\interlinepenalty
%                   \vskip\intextsep% <- 変更
                   \vskip\dimexpr\intextsep-\cvs+\cHT\relax
                   \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
                   \outputpenalty \z@
                   \@inserttrue
                 \fi
               \fi
               \if@insert
               \else
                 \@addtotoporbot
               \fi
             \fi
           \fi
         \fi
       \fi
     \fi
   \fi
   \if@insert
   \else
     \@resethfps
     \@cons\@deferlist\@currbox
   \fi
}
@aminophen
Copy link
Member

ぜんぜんわからない(LaTeX の問題なのか pLaTeX の問題なのか jsclasses の問題なのかすら)ので試してみているのですが、以下のソースで起きる不均等と同じでしょうか?

%#!pdflatex
\documentclass[12pt]{article}
\def\square{\frame{\phantom{\rule{10pt}{10pt}}}}
\begin{document}
\square\square\square\square\square\square\square\square\square
\begin{figure}[h]
  \frame{\phantom{\rule{10em}{10em}}}
\end{figure}

\square\square\square\square\square\square\square\square\square
\end{document}

この不均等も、きえださんの \@addtocurcol へのパッチ(に以下のフォールバックを加えたもの)で(だいたい)均等になると思います。

\ifx\pfmtname\undefined
  \newdimen\cvs
  \cvs\normalbaselineskip
  \newdimen\cHT
  \cHT12pt
\fi

@yuw
Copy link
Author

yuw commented Jul 17, 2016

以下のソースで起きる不均等と同じ

おそらく同じでしょう.また,下方の“多い”アキは行間分だけの量でしょう.

@aminophen
Copy link
Member

これが仮に問題だとして(そこすらちょっと私には正確には判断しかねます)、直すとするとほかのどの issue より影響が大きい気がします。 \@addtocurcol へのパッチということであれば、jsclasses ではなく少なくとも pLaTeX カーネルで修正すべきな気がしますし、そうすると fltrace/flafter/latexrelease への対応もかなりややこしいことになるので、より根源的には LaTeX カーネルで修正してほしくなってしまいます。

@okumuralab
Copy link
Member

そもそも

\documentclass{jsarticle}
\begin{document}
■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□

\frame{\phantom{\rule{15\cHT}{15\cwd}}}

■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□■□□□□
\end{document}

で上に寄るのはTeXの根源的な問題ですが,どこまで対処するか。

@yuw
Copy link
Author

yuw commented Jul 17, 2016

図版や表をフロートさせない要求はままあります.それも恣意的に.

例えば図/表はページ上部と文書仕様にあっても,作業行程が進むうちに個別にフロートさせないようにと“指定”がなされるという具合です.その際hオプションで対応するのは自然だと思います.その際,上下のアキは均等であることが当然に要求されます.

何かしらの対応がどこかでなされるとケアが不要になり,リスク低減につながります.

@kbhonda
Copy link

kbhonda commented Jul 17, 2016

たぶんこれを気にするのは,職業編集者と職業組版屋だと思います.
私ももちろんにしますので,実は目立つところは個別にad hocに手当してます.
原因は放置してたのですが,そこだったんですね.
今度からこっそり手当しておきます,ありがとうございます.
加えて深さの分の処置をいれる必要がありませんか?
あとこれはLaTeXカーネルの問題だと思います.

根本的には
「\vskip3mmは3mmアキではない,行間忘れるな」
と同根のように思います.

奥村先生

上に寄るのはTeXの根源的な問題ですが,どこまで対処するか。

これはよく私のところでも規範的な意味で話題になるのですが,
職業的な観点からいけば,TeXだからどうこうというのは無関係なんです.
個人的には,昔は写研,最近ではInDesignにできることをどこまで
簡単にできるようにするかの追及が個人的なテーマになりつつあります(苦笑)
それで,コストの問題との兼ね合いもありますが,
出力結果の綺麗さ >> 壁 >> マクロ的な美しさ,ソースコードの綺麗さ
ですので,\vbox系の前後の空きでも目立つところはいろいろ ad hocに手を入れてます.

図版や表をフロートさせない要求はままあります.それも恣意的に.

図の配置は出版社の規準がありますよね.
ちなみにここを見ているような方がよく目にしそうな工学系の分野で
h配置をする出版社がありますよ.

@okumuralab
Copy link
Member

私もよくH(hでないですが)は使います。キャプションとのバランスや,図の上部の具合によっても違いますので,気になる場合は(たいてい上部に)手で\vspaceを入れて調整しています(キャプションと本文が近づきすぎると読みにくくなるので)。うまくLaTeXが判断してくれればありがたいのですが,下部の\intextsepを外すのでいいのか,よく理解できていません。

ちなみに\intextsepについては美文書p.156のような場合には上部の\intextsepを外すこともよくあります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants