\resizebox{\textwidth}...でOverfull \hbox

\resizebox{\textwidth}...でOverfull \hbox

- 帯田 木偶太 の投稿
返信数: 5

一つの文字を版面横幅一杯に出力しようとして、次のようにしました。

    \documentclass{jarticle}\relax
    \usepackage{graphics}\relax
    \begin{document}
    \noindent\resizebox{\textwidth}{10cm}{亜}
    \end{document}

これをタイプセットすると、
    Overfull \hbox
の警告が出てしまいます。

どこが間違っているのでしょうか?

帯田 木偶太 への返信

Re: \resizebox{\textwidth}...でOverfull \hbox

- KUROKI Yusuke の投稿
TFMやクラスファイルの内部などで,欧文のフォントサイズに対する和文のフォントサイズを設定するのですが,小数で記述するので,その小数を使った割り算をしたときに発生する誤差が影響しているかもしれません.
KUROKI Yusuke への返信

Re: \resizebox{\textwidth}...でOverfull \hbox

- Akira Kakuto の投稿
> 発生する誤差が影響

+1.

以下の場合,
\fboxrule=0.9pt や \fboxrule=1.1pt では
Overfull \hbox
になりますが,\fboxrule=1pt ではなりませんでした。

%
% latex test.tex
%
\documentclass{article}\relax
\usepackage{graphics}\relax
\begin{document}
\fboxrule=1pt
\noindent\resizebox{\textwidth}{10cm}{\fbox{X}}
\end{document}
KUROKI Yusuke への返信

Re: \resizebox{\textwidth}...でOverfull \hbox

- Z. R. の投稿

実際に小数の割り算を実装しているマクロ(※TeXは小数の割り算ができない)である \Gscale@div の挙動を調べてみると、以下のようになりました。

327.0 / 9.62216 = 34.08469 (正解は 33.98405)
284.52756 / 7.77588 = 36.71323 (正解は 36.59105)

実際にかなりの誤差があるようです。

Z. R. への返信

Re: \resizebox{\textwidth}...でOverfull \hbox

- Z. R. の投稿

次のように、小数の割り算の実装を calc パッケージのものに変えてみました。

\documentclass{jarticle}\relax
\usepackage{graphics}\relax
\usepackage{calc}
\makeatletter %!!!!!!!!!!!!!!! TeX code BEGIN
\def\Gscale@div#1#2#3{%
  \setlength\dimen@{#3}%
  \ifdim\dimen@=\z@
    \PackageError{graphics}{Division by 0}\@eha
    \dimen@#2%
  \fi
  \edef\@tempd{\strip@pt\dimen@}%
  \setlength\dimen@{(#2)/\real{\@tempd}}%
  \edef#1{\strip@pt\dimen@}}
\makeatother  %!!!!!!!!!!!!!!! TeX code END
\begin{document}
\typeout{\the\textwidth}
\noindent\resizebox{\textwidth}{10cm}{亜}
\end{document}

すると以下のような結果になりました。

327.0 / 9.62216 = 33.98433
284.52756 / 7.77588 = 36.59055

そして、最終の横幅に対する誤差も 0.00272pt となり、Overfull 警告がでなくなりました。

Z. R. への返信

Re: \resizebox{\textwidth}...でOverfull \hbox

- 帯田 木偶太 の投稿

なるほど、計算誤差でしたか。そういうことなら、この警告は
読み流すことにしようと思います。
(Z. R.さんご提案のようにマクロを再定義するのも
魅力的ではありますが‥‥)

コメントいただいた方々、どうもありがとうございました。