summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/nidanfloat
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/nidanfloat
Initial commit
Diffstat (limited to 'macros/latex/contrib/nidanfloat')
-rw-r--r--macros/latex/contrib/nidanfloat/LICENSE28
-rw-r--r--macros/latex/contrib/nidanfloat/Makefile60
-rw-r--r--macros/latex/contrib/nidanfloat/README.md37
-rw-r--r--macros/latex/contrib/nidanfloat/nidanfloat-en.pdfbin0 -> 71586 bytes
-rw-r--r--macros/latex/contrib/nidanfloat/nidanfloat.dtx1524
-rw-r--r--macros/latex/contrib/nidanfloat/nidanfloat.ins19
-rw-r--r--macros/latex/contrib/nidanfloat/nidanfloat.pdfbin0 -> 159379 bytes
7 files changed, 1668 insertions, 0 deletions
diff --git a/macros/latex/contrib/nidanfloat/LICENSE b/macros/latex/contrib/nidanfloat/LICENSE
new file mode 100644
index 0000000000..dc26b0028a
--- /dev/null
+++ b/macros/latex/contrib/nidanfloat/LICENSE
@@ -0,0 +1,28 @@
+Copyright (c) 2010 ASCII MEDIA WORKS
+Copyright (c) 2016-2018 Japanese TeX Development Community
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/macros/latex/contrib/nidanfloat/Makefile b/macros/latex/contrib/nidanfloat/Makefile
new file mode 100644
index 0000000000..5af4eb2915
--- /dev/null
+++ b/macros/latex/contrib/nidanfloat/Makefile
@@ -0,0 +1,60 @@
+STRIPTARGET = nidanfloat.sty
+DOCTARGET = nidanfloat nidanfloat-en
+PDFTARGET = $(addsuffix .pdf,$(DOCTARGET))
+DVITARGET = $(addsuffix .dvi,$(DOCTARGET))
+KANJI = -kanji=utf8
+FONTMAP = -f ipaex.map -f ptex-ipaex.map
+TEXMF = $(shell kpsewhich -var-value=TEXMFHOME)
+
+default: $(STRIPTARGET) $(DVITARGET)
+strip: $(STRIPTARGET)
+all: $(STRIPTARGET) $(PDFTARGET)
+
+NIDAN = nidanfloat.sty
+
+NIDAN_SRC = nidanfloat.dtx
+
+# for generating files, we use pdflatex incidentally.
+# current packages contain ASCII characters only, safe enough
+nidanfloat.sty: $(NIDAN_SRC)
+ rm -f $(NIDAN)
+ pdflatex nidanfloat.ins
+ rm nidanfloat.log
+
+nidanfloat-en.dvi: nidanfloat.dtx
+ # built-in echo in shell is troublesome, so use perl instead
+ perl -e "print \"\\\\newif\\\\ifJAPANESE\\n"\" >platex.cfg
+ platex -jobname=nidanfloat-en $(KANJI) nidanfloat.dtx
+ platex -jobname=nidanfloat-en $(KANJI) nidanfloat.dtx
+ rm -f *.aux *.log *.toc
+ rm -f platex.cfg
+
+.SUFFIXES: .dtx .dvi .pdf
+.dtx.dvi:
+ rm -f platex.cfg
+ platex $(KANJI) $<
+ platex $(KANJI) $<
+ rm -f *.aux *.log *.toc
+.dvi.pdf:
+ dvipdfmx $(FONTMAP) $<
+
+.PHONY: install clean cleanstrip cleanall cleandoc
+install:
+ mkdir -p ${TEXMF}/doc/latex/nidanfloat
+ cp ./LICENSE ${TEXMF}/doc/latex/nidanfloat/
+ cp ./README.md ${TEXMF}/doc/latex/nidanfloat/
+ cp ./*.pdf ${TEXMF}/doc/latex/nidanfloat/
+ mkdir -p ${TEXMF}/source/latex/nidanfloat
+ cp ./Makefile ${TEXMF}/source/latex/nidanfloat/
+ cp ./*.dtx ${TEXMF}/source/latex/nidanfloat/
+ cp ./*.ins ${TEXMF}/source/latex/nidanfloat/
+ mkdir -p ${TEXMF}/tex/latex/nidanfloat
+ cp ./*.sty ${TEXMF}/tex/latex/nidanfloat/
+clean:
+ rm -f $(NIDAN) $(DVITARGET)
+cleanstrip:
+ rm -f $(NIDAN)
+cleanall:
+ rm -f $(NIDAN) $(DVITARGET) $(PDFTARGET)
+cleandoc:
+ rm -f $(DVITARGET) $(PDFTARGET)
diff --git a/macros/latex/contrib/nidanfloat/README.md b/macros/latex/contrib/nidanfloat/README.md
new file mode 100644
index 0000000000..cede3eea9f
--- /dev/null
+++ b/macros/latex/contrib/nidanfloat/README.md
@@ -0,0 +1,37 @@
+# nidanfloat
+
+This package enables bottom (`b`) placement option
+for double float in two column mode (nidan-kumi).
+This package was originally part of Japanese pLaTeX,
+and now is distributed as a separate package because
+it supports all LaTeX formats.
+The package was originally developed by ASCII MEDIA WORKS,
+and now maintained by Japanese TeX Development Community.
+
+## Changes from the original ASCII edition
+
+See the document (nidanfloat.pdf) for more information.
+
+- Fix several bugs in calculation of column height.
+
+## Repository
+
+The bundle is maintained on GitHub:
+https://github.com/texjporg/nidanfloat
+
+## See Also
+
+[The (UK) TeX FAQ](https://texfaq.github.io/FAQ-2colfloat)
+explains some alternatives to place two-column floats at bottom of page
+(the nidanfloat package is also listed).
+
+## License
+
+The bundle may be distributed and/or modified under the terms of
+the 3-clause BSD license (see [LICENSE](./LICENSE)).
+
+## Release Date
+
+2018-07-28
+
+Japanese TeX Development Community
diff --git a/macros/latex/contrib/nidanfloat/nidanfloat-en.pdf b/macros/latex/contrib/nidanfloat/nidanfloat-en.pdf
new file mode 100644
index 0000000000..5eb5a4fd2d
--- /dev/null
+++ b/macros/latex/contrib/nidanfloat/nidanfloat-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/nidanfloat/nidanfloat.dtx b/macros/latex/contrib/nidanfloat/nidanfloat.dtx
new file mode 100644
index 0000000000..91095aa5ae
--- /dev/null
+++ b/macros/latex/contrib/nidanfloat/nidanfloat.dtx
@@ -0,0 +1,1524 @@
+% \iffalse
+%% File: nidanfloat.dtx
+%
+% Copyright 1994 ASCII Co.
+% Copyright (c) 2010 ASCII MEDIA WORKS
+% Copyright (c) 2016-2018 Japanese TeX Development Community
+%
+% This file is part of the pLaTeX2e system (community edition).
+% -------------------------------------------------------------
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ifx\JAPANESEtrue\undefined
+ \expandafter\newif\csname ifJAPANESE\endcsname
+ \JAPANESEtrue
+\fi
+\def\eTeX{$\varepsilon$-\TeX}
+\def\pTeX{p\kern-.15em\TeX}
+\def\epTeX{$\varepsilon$-\pTeX}
+\def\pLaTeX{p\kern-.05em\LaTeX}
+\def\pLaTeXe{p\kern-.05em\LaTeXe}
+%</driver>
+% \fi
+%
+% \setcounter{StandardModuleDepth}{1}
+%
+% \StopEventually{}
+%
+% \iffalse
+% \changes{v1.10}{1994/04/07}{platex2.09用}
+% \changes{v2.2}{1997/10/22}{platex2e用に修正}
+% \changes{v2.3}{2000/12/20}{一段抜きのフロートを混ぜるとエラーに
+% なるのを修正(ありがとう、倉沢@QUIPUさん)}
+% \changes{v2.4}{2001/02/19}{最終ページで左右の行間が揃わない部分を修正}
+% \changes{v2.4}{2001/02/19}{柱が出ないのを修正}
+% \changes{v2.4}{2001/07/23}{ページの大きさが小さくなるのを修正}
+% \changes{v2.5}{2001/09/14}{パッケージオプション(balance,nobalance)を追加}
+% \changes{v2.6}{2003/05/15}{\cs{@fstype}を\cs{@fstyle}とタイプミスしていた
+% のを修正(ありがとう、川上@航空宇宙研究所さん)}
+% \changes{v2.7}{2005/12/09}{必須フォーマットファイルをpLaTeX2eからLaTeX2eへ変更}
+% \changes{v2.8}{2017/05/01}{\cs{@rightfixht}を追加}
+% \changes{v2.8}{2017/05/01}{\cs{@outputbox}を作るときの
+% \texttt{to \cs{@fixht}}の高さ指定をやめた}
+% \changes{v2.8}{2017/05/01}{\cs{vss}の位置を移動}
+% \changes{v2.8}{2017/05/01}{右カラム用の処理を丸ごと追加}
+% \changes{v2.8}{2017/05/01}{右カラムでは\cs{@rightfixht}の高さで
+% 組み立て、\cs{@colht}も更新するようにした}
+% \changes{v2.9}{2018/07/28}{Add English documentation
+% (no code change; thanks David Carlisle)}
+% \fi
+%
+% \iffalse
+\NeedsTeXFormat{LaTeX2e}
+%<*driver>
+\NeedsTeXFormat{pLaTeX2e}
+\ProvidesFile{nidanfloat.dtx}
+%</driver>
+%<core>\ProvidesPackage{nidanfloat}%
+ [2018/07/28 v2.9 Put double-floats at top/bottom within twocolumn mode]
+%
+%<*driver>
+\documentclass{jltxdoc}
+\GetFileInfo{nidanfloat.dtx}
+\ifJAPANESE
+\title{TOP, BOTTOM指定が可能な2段抜きフロート\\
+ バージョン \space\fileversion}
+\date{作成日:\filedate}
+\author{中野 賢\footnote{株式会社 アスキー 出版技術部
+ (メールアドレス:ken-na at ascii.co.jp)}}
+\else
+\title{TOP, BOTTOM specifiable 2 column floats\\
+ Version \fileversion}
+\date{Date:\filedate}
+\author{Ken Nakano\footnote{%
+ Publishing Engineering Department, ASCII Corporation
+ (email: ken-na at ascii.co.jp)}}
+\fi
+\begin{document}
+ \maketitle
+ \DocInput{\filename}
+\end{document}
+%</driver>
+% \fi
+%
+%\ifJAPANESE
+% \file{nidanfloat}パッケージは、二段組時に段抜きのフロートをページ下部にも
+% 配置可能にする。もともとp\LaTeX{}の一部として配布されていましたが、
+% 全てのフォーマットをサポートできることから、
+% 2018年以降は独立して配布することにしました。
+%
+% English documentation is available as ``nidanfloat-en.pdf''
+% (thanks David Carlisle).
+%\else
+% The package \textsf{nidanfloat} enables bottom (|b|) placement option
+% for double float in two column mode (\emph{nidan-kumi}).
+% This package was originally part of Japanese \pLaTeX,
+% and now is distributed as a separate package because
+% it supports all \LaTeX\ formats.
+%
+% 日本語版ドキュメントは``nidanfloat.pdf``です。
+%\fi
+%
+% [TODO] This package needs adjustment for \LaTeXe\ 2015/01/01 changes
+% of the float order in two column mode!
+%
+%\ifJAPANESE
+% \section{コード}
+%\else
+% \section{Code}
+%\fi
+%
+%\ifJAPANESE
+% \subsection{パッケージオプション}
+%\else
+% \subsection{Package Options}
+%\fi
+%
+%\ifJAPANESE
+% \changes{v2.5}{2001/09/14}{パッケージオプションを追加}
+% \file{nidanfloat}パッケージでは、最終ページの左右カラムの高さを
+% 均一に振り分けるようにしている。しかし、この機能の影響により、
+% 最終ページでの|\newpage|と|\clearpage|コマンドが正しく動作しない。
+% そこで、この機能を使うかどうかを指定するオプションを導入した。
+% パッケージ指定時にオプション``balance''を指定すると、
+% 最終ページの自動調整を行なうようになる。デフォルトでは行なわない。
+%\else
+% In the \file{nidanfloat} package, the height of the left and right columns
+% of the last page set is designed to be equalised.
+% However, due to the effect of this function, the
+% |\newpage| and |\clearpage| commands on last page do not work properly.
+% We introduced an option to specify whether or not to use this function.
+% If you specify the option `` balance'' when specifying a package,
+% automatic adjustment of last page will be done. It is not done by default.
+%\fi
+% \begin{macrocode}
+%<*core>
+\DeclareOption{balance}{\AtEndDocument{\let\clearpage\balanceclearpage}}
+\DeclareOption{nobalance}{\relax}
+\ExecuteOptions{nobalance}
+\ProcessOptions
+% \end{macrocode}
+%
+%\ifJAPANESE
+% \subsection{フロートパラメータ}
+% ここでは、段抜きのフロートをページ下部に置くために作成したパラメータに
+% ついて説明をする。
+%\else
+% \subsection{Float parameters}
+% Here, we explain the parameters created to place a floating float
+% at the bottom of the page.
+%\fi
+%
+% \begin{macro}{\dblbotfraction}
+%\ifJAPANESE
+% 2段組時にページ下部に占めることのできる、二段抜きフロートの割合。
+% デフォルトは0.5、すなわちページ半分を占めることができるようにしている。
+%\else
+% Percentage of a page that may be occupied by a two-column float.
+% The default is 0.5, which means that it can occupy half of the page.
+%\fi
+% \begin{macrocode}
+\newcommand\dblbotfraction{0.5}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@dblbotnumber}
+%\ifJAPANESE
+% ページ下部に入れることのできる、二段抜きフロートの数。
+% デフォルトでは、二つの図を置くことができるようにしている。
+% |\c@dblbotnumber|はカウンタ|dblnumber|の内部形式。
+%\else
+% Number of two-column floats that can be placed at the bottom of the page.
+% By default this is set to 2.
+% |\c@dblbotnumber| is the internal format of the counter |dblnumber|.
+%\fi
+% \begin{macrocode}
+\newcount\c@dblbotnumber
+\setcounter{dblbotnumber}{2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@dblbotroom}
+% \begin{macro}{\@dblbotnum}
+%\ifJAPANESE
+% |\@dblbotroom|は、ページ下部に占めることのできる、
+% 二段抜きフロートの割合を示す長さ変数。
+% |\@dblbotnum|は、ページ下部に入れることのできる、
+% 二段抜きフロートの数を保持するカウンタ。
+%\else
+% |\@dblbotroom|: Length variable indicating the percentage
+% of the page a two-column float can occupy at the bottom of the page.
+% |\@dblbotnum|: Counter that holds the number of two-column floats
+% that can be placed at the bottom of the page.
+%\fi
+% \begin{macrocode}
+\newdimen\@dblbotroom
+\newcount\@dblbotnum
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@dblfloatplacement}
+%\ifJAPANESE
+% 二段組用のフロートパラメータを設定するマクロを、新たに追加したパラメータ
+% も設定するように再定義する。
+%\else
+% Redefine this macro to set the newly added parameters.
+%\fi
+% \begin{macrocode}
+\def\@dblfloatplacement{%
+ \global\@dbltopnum\c@dbltopnumber
+ \global\@dblbotnum\c@dblbotnumber % added
+ \global\@dbltoproom\dbltopfraction\@colht
+ \global\@dblbotroom\dblbotfraction\@colht % added
+ \@textmin\@colht
+ \advance\@textmin-\@dbltoproom
+ \advance\@textmin-\@dblbotroom % added
+ \@fpmin\dblfloatpagefraction\textheight
+ \@fptop\@dblfptop
+ \@fpsep\@dblfpsep
+ \@fpbot\@dblfpbot
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\ifJAPANESE
+% \subsection{フロートリストへの登録}
+% 二段抜きフロートの定義は、クラスファイルで次のようにして行なわれる。
+%\else
+% \subsection{Define float lists}
+% The definition of a double column float should be done in
+% a class file, as follows.
+%\fi
+%\begin{verbatim}
+% \newenvironment{figure*}
+% {\@dblfloat{figure}}
+% {\end@dblfloat}
+%\end{verbatim}
+%\ifJAPANESE
+% 文章中で|figure*|環境で囲まれた部分は、フロート保持用のリストに登録される。
+% この節では、段抜きフロートをページ下部にも置けるようにするために拡張した
+% マクロについて説明をする。
+%\else
+% The content of |figure*| environment is registered in the two-column float
+% holding list.
+% In this section, we expand it so that you can put a float at the bottom of the page.
+%\fi
+% \begin{macro}{\@dblbotlist}
+% \begin{macro}{\L@toplist}
+% \begin{macro}{\R@toplist}
+% \begin{macro}{\L@botlist}
+% \begin{macro}{\R@botlist}
+%\ifJAPANESE
+% 二段組のページ下部に置くフロートを保持するために|\@dblbotlist|を追加する。
+% また、カラムの上下に置くフロート用には、左側と右側で区別をするため、
+% |\L@toplist|, |\R@toplist|, |\L@botlist|, |\R@botlist|を追加する。
+%\else
+% Add the |\@dblbotlist| to hold the float to be placed at the bottom of
+% the two-column page.
+% In addition, for floats to be placed above and below the column,
+% distinguish between the left side and the right side,
+%\fi
+% \begin{macrocode}
+\gdef\@dblbotlist{}
+\gdef\L@toplist{}
+\gdef\R@toplist{}
+\gdef\L@botlist{}
+\gdef\R@botlist{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@dblfloat}
+% \begin{macro}{\@dbflt}
+% \begin{macro}{\end@dblfloat}
+%\ifJAPANESE
+% |\@dblfloat|から呼び出される、|\@dbflt|を再定義し、位置指定が省略された
+% ときのパラメータを``tb''とする。また、|\end@dblfloat|を|\end@float|にして、
+% 現在ページの下部にフロートを置けるようにする。
+%\else
+% |\@dblfloat|, |\@dbflt| is redefined so that the default position
+% argument is set to ``tb''. Also, set |\end@dblfloat| to |\end@float| to
+% allow floats to be placed at the bottom of the page.
+%\fi
+% \begin{macrocode}
+\def\@dblfloat{%
+ \if@twocolumn\let\reserved@a\@dbflt\else\let\reserved@a\@float\fi
+ \reserved@a}
+\def\@dbflt#1{\@ifnextchar[{\@xdblfloat{#1}}{\@xdblfloat{#1}[tb]}}
+\def\@xdblfloat#1[#2]{%
+ \@xfloat{#1}[#2]\hsize\textwidth\linewidth\textwidth}
+\let\end@dblfloat\end@float
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@addtocurcol}
+%\ifJAPANESE
+% |\@xdblfloat|から呼び出された、|\@xfloat|は位置指定オプションの評価を行ない、
+% フロートオブジェクトの組み立てを開始する。
+% フロートオブジェクトの組み立ては|\end@float|で終了する。
+% |\end@float|は、ペナルティ値を$-10004$にして|\output|ルーチンを起動する。
+% この値での|\output|ルーチンは|\@specialoutput|を起動する。
+% |\@specialoutput|は|\@addtocurcol|を呼び出し、フロートの内容を現在ページに
+% 出力できるのならば出力をする。そうでなければ、別の可能性を探る。
+%\else
+% Called from | @xdblfloat|, |\@xfloat| evaluates the position specification option,
+% and start building the float object.
+% Assembling a float object ends with |\end@float|.
+% |\end@float| starts the |\output| routine with a penalty value of $-10004$.
+% The |\output| routine with this value invokes |\@specialoutput|.
+% |\@specialoutput| calls |\@addtocurcol| to move the contents of the float to
+% the current page.
+% If it can be output, then do so; otherwise we explore another possibility.
+%\fi
+% \begin{macrocode}
+\def\@addtocurcol{%
+% \end{macrocode}
+%\ifJAPANESE
+% このパッケージの場合、段抜きのフロートが渡される可能性があるので、まず、
+% それをチェックする。フロートの幅がカラム幅よりも大きい場合は、強制的に
+% 段抜きフロートとして扱う。
+%\else
+% In the case of this package, there is a possibility that a double column
+% float may be passed, so check it. If the width of the float is larger
+% than the column width, forcibly treat as starred, double column float.
+%\fi
+% \begin{macrocode}
+ \ifdim\wd\@currbox>\columnwidth
+ \@addtodblcol
+ \else
+% \end{macrocode}
+%\ifJAPANESE
+% それ以外の場合は、元の動作とほとんど同じである。
+%\else
+% Otherwise, it is almost the same as the original version.
+%\fi
+% \begin{macrocode}
+ \@insertfalse
+ \@setfloattypecounts
+ \ifnum\@fpstype=8 % is only `!p'
+ \else
+ \ifnum\@fpstype=24 % is only `p'
+ \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
+% \end{macrocode}
+%\ifJAPANESE
+% ページ下部のフロートを保持しているフロートリストの名前が異なる。
+%\else
+% The only difference from \LaTeX\ is the name of float list,
+%\fi
+% \begin{macrocode}
+ \@bitor\@currtype{\L@botlist\R@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
+ \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
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addtotoporbot}
+%\ifJAPANESE
+% フロートを保持しているリスト変数の修正。
+% \changes{v2.3}{2000/12/20}{%
+% タイプミスの修正と\cs{@flcheckspace}の呼び出しを変更}
+%\else
+% Update variables holding float lists.
+%\fi
+% \begin{macrocode}
+\def\@addtotoporbot{%
+ \@getfpsbit \tw@
+ \ifodd\@tempcnta
+ \@flsetnum\@topnum
+ \ifnum\@topnum>\z@
+ \@tempswafalse
+ \@flcheckspace\@toproom\@toplist\L@toplist\R@toplist
+ \if@tempswa
+ \@bitor\@currtype{\@midlist\L@botlist\R@botlist}%
+ \if@test\else
+ \if@firstcolumn
+ \@flupdates \@topnum \@toproom \L@toplist
+ \else
+ \@flupdates \@topnum \@toproom \R@toplist
+ \fi
+ \@inserttrue
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert\else\@addtobot\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addtobot}
+%\ifJAPANESE
+% フロートを保持しているリスト変数の修正。
+% \changes{v2.3}{2000/12/20}{\cs{@flcheckspace}の呼び出しを変更}
+%\else
+% Update variables holding float lists.
+%\fi
+% \begin{macrocode}
+\def\@addtobot{%
+ \@getfpsbit 4\relax
+ \ifodd\@tempcnta
+ \@flsetnum\@botnum
+ \ifnum\@botnum>\z@
+ \@tempswafalse
+ \@flcheckspace\@botroom\@botlist\L@botlist\R@botlist
+ \if@tempswa
+ \global\maxdepth\z@
+ \if@firstcolumn
+ \@flupdates \@botnum \@botroom \L@botlist
+ \else
+ \@flupdates \@botnum \@botroom \R@botlist
+ \fi
+ \@inserttrue
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\org@addtonextcol}
+% \begin{macro}{\@addtonextcol}
+%\ifJAPANESE
+% これらは、挿入に失敗したフロートや`p'指定のフロートを出力するために、
+% |\@startcolumn|で用いられる。このパッケージでは、カラム幅よりも大きい幅を
+% 持つフロートに対しては、段抜きフロートリストとして出力するようにしている。
+%\else
+% These macros are used inside |\@startcolumn|, to output a float
+% that failed to be inserted or a float specified by `p'.
+% In this package, a width larger than the column width
+% signals the float should be added to the double column float list.
+%\fi
+% \begin{macrocode}
+\let\org@addtonextcol\@addtonextcol
+\def\@addtonextcol{%
+ \ifdim\wd\@currbox>\columnwidth
+ \@addtodblcol
+ \else
+ \org@addtonextcol
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@addtodblcol}
+%\ifJAPANESE
+% |\@addtodblcol|マクロは、フロートオブジェクトが現在ページに入るかどうか
+% を確認し、入るのであれば|\@addtodbltoporbot|を呼び出す。そうでなければ、
+% |\@dbldeferlist|に登録する。
+%
+% まず|@insert|フラグを偽にする。そして、フロートタイプを|\@fpstype|に得る。
+% フロートタイプが8または24の場合、位置オプションは`!p'か`p'だけであるので、
+% 無条件に|\@dbldeferlist|に加える。
+%\else
+% The |\@addtodblcol| macro determines whether the float object fits in
+% the current page and calls |\@addtodbltoporbot| if it would fit.
+% Otherwise, adds to |\@dbldeferlist|.
+%
+% First set |@insert| flag to false, obtain the float type as |\@fpstype|.
+% If the float type is 8 or 24, the position option is only `!p 'or `p', so
+% unconditionally add to |\@dbldeferlist|.
+%\fi
+% \begin{macrocode}
+\def\@addtodblcol{%
+ \begingroup
+ \@insertfalse
+ \@setfloattypecounts
+ \ifnum\@fpstype=8 % is only `!p'
+ \else
+ \ifnum\@fpstype=24 % is only `p'
+ \else
+% \end{macrocode}
+%\ifJAPANESE
+% そうでなければ、同タイプのフロートで未出力のものがあるかどうかを確認する。
+% 同タイプのフロートでまだ出力していないものがある場合は、現在のフロートを
+% 出力しない。ただし、同タイプであってもカラム幅のフロートについては考慮
+% しない。出力することができるのならば、|\@addtodblbotortop|を呼び出す。
+%\else
+% Otherwise, check whether there are unplaced ones of the same float type.
+% If there is a float of the same type that has not been output yet,
+% do not output. However, even with the same type, consider the float column width.
+% If you can output it, call |\@addtodblbotortop|.
+%\fi
+% \begin{macrocode}
+ \@bitor\@currtype{\@dbldeferlist}
+ %\@bitor\@currtype{\@deferlist\@dbldeferlist}
+ \if@test
+ \else
+ \@tempswafalse
+ \@checkdblspace
+ \if@tempswa
+ \@addtodbltoporbot
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert\else\@cons\@dbldeferlist\@currbox\fi
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addtodbltoporbot}
+%\ifJAPANESE
+% まず、`t'の指定があるかと、ページ上部に入れる数を越えていないかを確認する。
+%\else
+% First, check whether there is a specification of `t',
+% and whether it exceeds the number allowed at the top of the page.
+%\fi
+% \begin{macrocode}
+\def\@addtodbltoporbot{%
+ \@getfpsbit \tw@
+ \ifodd\@tempcnta
+ \@flsetnum\@dbltopnum
+ \ifnum\@dbltopnum>\z@
+% \end{macrocode}
+%\ifJAPANESE
+% そして、ページ上部あるいは下部に同タイプのフロートが出力される可能性が
+% あるのかを調べる。二段組フロートは一段組フロートの上部に置かれることに注意。
+%\else
+% Then, check whether the same type of float may be output at the top or
+% bottom of the page.
+% Note that two-column floats are placed on the top of a one-column floats.
+%\fi
+% \begin{macrocode}
+ \@bitor\@currtype{%
+ \L@toplist\R@toplist\L@botlist\R@botlist\@dblbotlist}
+ \if@test
+ \else
+% \end{macrocode}
+%\ifJAPANESE
+% 配置可能ならば、出力するだけのスペースがあるのかを確認する。
+%\else
+% If possible, check if there is enough space to output the float.
+%\fi
+% \begin{macrocode}
+ \@tempswafalse
+ \@dblflcheckspace \@dbltoproom \@dbltoplist
+% \end{macrocode}
+%\ifJAPANESE
+% スペースがあれば、段抜きフロートが上部に占めることのできる高さから、
+% その分を引く。また、上部に入れる段抜きフロートの数を減らし、
+% 上部段抜き用のフロートリストに登録をする。
+%\else
+% If there is a space, subtract the height of the float from
+% the space available for top floats. Also, reduce the number of
+% starred floats to put in the top,
+% and update the float list for double column top floats.
+%\fi
+% \begin{macrocode}
+ \if@tempswa
+ \@tempdima-\ht\@currbox
+ \advance\@tempdima
+ -\ifx\@dbltoplist\@empty \dbltextfloatsep\else\dblfloatsep\fi
+ \global\advance\@dbltoproom\@tempdima
+ \global\advance\@dbltopnum\m@ne
+ \@cons\@dbltoplist\@currbox
+% \end{macrocode}
+%\ifJAPANESE
+% 左カラムのときは、カラムの高さ|\@colroom|からフロート分を引く。
+%\else
+% For the left column, subtract the float from the column height |\@colroom|.
+%\fi
+% \begin{macrocode}
+ \if@firstcolumn
+ \advance\@colroom\@tempdima
+ \global\advance\@colroom\maxdepth
+% \end{macrocode}
+%\ifJAPANESE
+% 右カラムのときは、新規の段抜きフロート分だけでなく、これを挿入すること
+% によって、左カラムから移動してくるテキストの高さも引く。
+%\else
+% In the case of the right column, insert not only the new float,
+% also the height of the text moved from the left column is decreased.
+%\fi
+% \begin{macrocode}
+ \else
+ \@tempdima\textheight
+ \@chkdblfloatht\advance\@tempdima-\@floatht
+ \L@chkfloatht\advance\@tempdima-\@floatht
+ \vbadness=\@M \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \setbox\z@=\vbox{\unvcopy\@leftcolumn}%
+ \setbox\@ne=\vsplit\z@ to\@tempdima
+ \advance\@colroom-\ht\z@
+ \global\advance\@colroom-\dp\z@
+ \fi
+% \end{macrocode}
+%\ifJAPANESE
+% 最後に、|@insert|フラグを真にする。
+%\else
+% Finally, set the |@insert| flag to true.
+%\fi
+% \begin{macrocode}
+ \@inserttrue
+ \fi
+ \fi
+ \fi
+ \fi
+ \if@insert\else\@addtodblbot\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@addtodblbot}
+%\ifJAPANESE
+% ページ下部に段抜きフロートを置くときも、上部と同じである。
+% ただし、二段組フロートは最下部に置かれるので、他の出力用リストを調べる
+% 必要はないことが異なる。
+%\else
+% Placing a two-column float at the bottom of the page is
+% similar to the preceding section.
+% However, because a two-column float is placed at the very bottom,
+% we don't have to examine other output lists.
+%\fi
+% \begin{macrocode}
+\def\@addtodblbot{%
+ \@getfpsbit 4\relax
+ \ifodd\@tempcnta
+ \@flsetnum\@botnum
+ \ifnum\@botnum>\z@
+ \@tempswafalse
+ \@dblflcheckspace \@dbltoproom \@dbltoplist
+ \if@tempswa
+ \@tempdima-\ht\@currbox \advance\@tempdima
+ -\ifx\@dblbotlist\@empty \dbltextfloatsep\else\dblfloatsep\fi
+ \global\advance\@dblbotroom\@tempdima
+ \global\advance\@dblbotnum\m@ne
+ \@cons\@dblbotlist\@currbox
+ \if@firstcolumn
+ \advance\@colroom\@tempdima
+ \global\advance\@colroom\maxdepth
+ \else
+ \@tempdima\textheight
+ \@chkdblfloatht\advance\@tempdima-\@floatht
+ \L@chkfloatht\advance\@tempdima-\@floatht
+ \vbadness=\@M \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \setbox\z@=\vbox{\unvcopy\@leftcolumn}%
+ \setbox\@ne=\vsplit\z@ to\@tempdima
+ \advance\@colroom-\ht\z@
+ \global\advance\@colroom-\dp\z@
+ \fi
+ \@inserttrue
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\ifJAPANESE
+% \subsection{フロートの高さを計算するマクロ}
+%\else
+% \subsection{Macro to calculate float height}
+%\fi
+%
+% \begin{macro}{\@floatht}
+%\ifJAPANESE
+% |\@floatht|は、出力リストに格納されているフロートの高さを格納するのに用いる。
+%\else
+% |\@floatht| is used to store the float height stored in the output list.
+%\fi
+% \begin{macrocode}
+\global\newdimen\@floatht \@floatht\z@
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@flcheckspace}
+%\ifJAPANESE
+% \changes{v2.3}{2000/12/20}{状況別に場合わけするようにした}
+%\fi
+% \begin{macrocode}
+\def \@flcheckspace #1#2#3#4{%
+ \advance \@reqcolroom
+ \if@twocolumn
+ \if@firstcolumn
+ \ifx #3\@empty \textfloatsep \else \floatsep \fi
+ \else
+ \ifx #4\@empty \textfloatsep \else \floatsep \fi
+ \fi
+ \else
+ \ifx #2\@empty \textfloatsep \else \floatsep \fi
+ \fi
+ \ifdim \@colroom>\@reqcolroom
+ \ifdim #1>\ht\@currbox
+ \@tempswatrue
+ \else
+ \ifnum \@fpstype<\sixt@@n
+ \@tempswatrue
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@dblflcheckspace}
+%\ifJAPANESE
+% 段抜きフロートがページ上部あるいは下部に占めることのできる割合を越えて
+% いないかをチェックする。越えていなければ|\@tempswa|を真にする。
+% \changes{v2.6}{2003/05/15}{\cs{@fstype}を\cs{@fstyle}とタイプミスしていた}
+%\else
+% Check if the percentage that can be occupied by floats
+% on the top or bottom of the page has been exceeded.
+% If not, |\@tempswa| will be made true.
+%\fi
+% \begin{macrocode}
+\def\@dblflcheckspace#1#2{%
+ \@tempdima=#1\relax
+ \advance\@tempdima
+ -\ifx #2\@empty \dbltextfloatsep\else\dblfloatsep\fi
+ \ifdim\@tempdima>\ht\@currbox
+ \@tempswatrue
+ \else
+ \ifnum\@fpstype<\sixt@@n
+ \advance\@tempdima\@textmin
+ \if \@tempdima>\ht\@currbox
+ \@tempswatrue
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@checkdblspace}
+%\ifJAPANESE
+% 段抜きフロートと段抜きフロート間スペース(あるいは段抜きフロートとテキストと
+% の間のスペース)を入れる余裕があるかを調べる。
+%
+% まず、現在、組み立ててあるテキストの高さと、最小限入らなくてはならない
+% テキストの量とを比較し、大きいほうを|\@tempdima|に格納する。
+% 右カラムにいるときは、左カラムのテキストの高さも加える。
+%\else
+% Check whether the float would fit in the space allocated to text page floats.
+%
+% First, compare the height of text currently assembled with the amount of text
+% that must be minimized, and store the larger one in |\@tempdima|.
+% If you are in the right column, also add the height of the text in the left column.
+%\fi
+% \begin{macrocode}
+\def\@checkdblspace{%
+ \@tempdima\@pageht\advance\@tempdima\@pagedp
+ \@tempdimb\textfraction\@colht
+ \ifdim\@tempdima<\@tempdimb \@tempdima\@tempdimb\fi
+ \if@firstcolumn\else
+ \advance\@tempdima\ht\@leftcolumn
+ \advance\@tempdima\dp\@leftcolumn
+ \fi
+% \end{macrocode}
+%\ifJAPANESE
+% そして、出力する予定のカラム幅フロートと段抜きフロートの高さを加える。
+% このとき、段抜き用のフロートの高さは二倍する。
+%\else
+% Then add the height of the column width float and
+% two-column float that are to be output.
+% At this time, double the height of the two-column float.
+%\fi
+% \begin{macrocode}
+ \L@chkfloatht\advance\@tempdima\@floatht
+ \R@chkfloatht\advance\@tempdima\@floatht
+ \@chkdblfloatht\advance\@tempdima\tw@\@floatht
+% \end{macrocode}
+%\ifJAPANESE
+% それから、現在のフロートの高さと必要なスペースを加える。
+% このときも、それらの高さを二倍する。
+%\else
+% Then add the current float height and required space.
+% Again, double their heights.
+%\fi
+% \begin{macrocode}
+ \@tempdimb\ht\@currbox\advance\@tempdimb\dp\@currbox
+ \advance\@tempdimb
+ \ifdim\@floatht>\z@ \dbltextfloatsep\else\dblfloatsep\fi
+ \multiply\@tempdimb\tw@ \advance\@tempdima\@tempdimb
+% \end{macrocode}
+%\ifJAPANESE
+% これらすべての要素分の高さが|\textheight|の2倍よりも小さければ、
+% 現在のフロートを置くことができると判断する。
+%\else
+% If the height of all these elements is less than twice the |\textheight|,
+% we can place the current float.
+%\fi
+% \begin{macrocode}
+ \ifdim\@tempdima>\tw@\textheight
+ \@tempswafalse
+ \else
+ \@tempswatrue
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tmp@comflelt}
+% \begin{macro}{\tmp@comdblflelt}
+%\ifJAPANESE
+% 出力リストに格納されているフロートの高さを計るために用いる。
+% それぞれ、|\@comfelt|, |\@comdblflelt|と同じだが、フロートの内容が
+% 失われないように|\copy|をしているのが異なる。
+%\else
+% Used to measure the height of the float stored in the output list.
+% Almost the same as |\@comfelt|, |\@comdblflelt| respectively, but
+% use |\copy| so that the original box is not lost.
+%\fi
+% \begin{macrocode}
+\def\tmp@comflelt#1{%
+ \setbox\@tempboxa
+ \vbox{\unvbox\@tempboxa\copy #1\vskip\floatsep}%
+}
+\def\tmp@comdblflelt#1{%
+ \setbox\@tempboxa
+ \vbox{\unvbox\@tempboxa\copy #1\vskip\dblfloatsep}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\L@chkfloatht}
+% \begin{macro}{\R@chkfloatht}
+%\ifJAPANESE
+% それぞれ、左カラムと右カラムに出力するフロートの高さを計算するのに用いる。
+% 計算結果は|\@floatht|に格納する。
+%\else
+% Used to calculate the height of the float to be output to the left and
+% right column, respectively.
+% The calculation result is stored in |\@floatht|.
+%\fi
+% \begin{macrocode}
+\def\L@chkfloatht{\@floatht\z@
+ \ifx\L@toplist\@empty\else
+ \let\@elt\tmp@comflelt\setbox\@tempboxa\vbox{}\L@toplist
+ \setbox\@ne\vbox{\boxmaxdepth\maxdepth
+ \unvbox\@tempboxa\vskip-\floatsep\topfigrule\vskip\textfloatsep
+ }%
+ \let\@elt\relax \advance\@floatht\ht\@ne \advance\@floatht\dp\@ne
+ \fi
+ \ifx\L@botlist\@empty\else
+ \let\@elt\tmp@comflelt\setbox\@tempboxa\vbox{}\L@botlist
+ \setbox\@ne\vbox{\boxmaxdepth\maxdepth
+ \vskip\textfloatsep\botfigrule\unvbox\@tempboxa\vskip-\floatsep
+ }%
+ \let\@elt\relax \advance\@floatht\ht\@ne \advance\@floatht\dp\@ne
+ \fi
+ \global\@floatht\@floatht
+}
+\def\R@chkfloatht{\@floatht\z@
+ \ifx\R@toplist\@empty\else
+ \let\@elt\tmp@comflelt\setbox\@tempboxa\vbox{}\R@toplist
+ \setbox\@ne\vbox{\boxmaxdepth\maxdepth
+ \unvbox\@tempboxa\vskip-\floatsep\topfigrule\vskip\textfloatsep
+ }%
+ \let\@elt\relax \advance\@floatht\ht\@ne \advance\@floatht\dp\@ne
+ \fi
+ \ifx\R@botlist\@empty\else
+ \let\@elt\tmp@comflelt\setbox\@tempboxa\vbox{}\R@botlist
+ \setbox\@ne\vbox{\boxmaxdepth\maxdepth
+ \vskip\textfloatsep\botfigrule\unvbox\@tempboxa\vskip-\floatsep
+ }%
+ \let\@elt\relax \advance\@floatht\ht\@ne \advance\@floatht\dp\@ne
+ \fi
+ \global\@floatht\@floatht
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@chkdblfloatht}
+%\ifJAPANESE
+% ページ上部と下部に出力する段抜きフロートの高さを計算し、
+% 結果を|\@floatht|に格納する。
+%\else
+% Calculate the height of the double float output on the top and bottom
+% of the page, store the result in |\@floatht|.
+%\fi
+% \begin{macrocode}
+\def\@chkdblfloatht{\@floatht\z@
+ \ifx\@dbltoplist\@empty\else
+ \let\@elt\tmp@comdblflelt\setbox\@tempboxa\vbox{}\@dbltoplist
+ \setbox\@ne\vbox{\boxmaxdepth\maxdepth
+ \unvbox\@tempboxa
+ \vskip-\dblfloatsep
+ \dblfigrule
+ \vskip\dbltextfloatsep
+ }%
+ \let\@elt\relax \advance\@floatht\ht\@ne \advance\@floatht\dp\@ne
+ \fi
+ \ifx\@dblbotlist\@empty\else
+ \let\@elt\tmp@comdblflelt\setbox\@tempboxa\vbox{}\@dblbotlist
+ \setbox\@ne\vbox{\boxmaxdepth\maxdepth
+ \vskip\dbltextfloatsep
+ \dblfigrule
+ \unvbox\@tempboxa
+ \vskip-\dblfloatsep
+ }%
+ \let\@elt\relax \advance\@floatht\ht\@ne \advance\@floatht\dp\@ne
+ \fi
+ \global\@floatht\@floatht
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\ifJAPANESE
+% \subsection{フロートとテキストのマージ}
+%\else
+% \subsection{Merging float and text}
+%\fi
+%
+% \begin{macro}{\@fixht}
+%\ifJAPANESE
+% |\@fixht|は、左カラムの高さを格納するのに用いる。
+%\else
+% |\@fixht| is used to store the height of the left column.
+%\fi
+% \begin{macrocode}%
+\global\newdimen\@fixht
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@rightfixht}
+%\ifJAPANESE
+% \emph{日本語\TeX{}開発コミュニティによる追加}:
+% |\@rightfixht|は、右カラムの高さを格納するのに用いる。
+% \changes{v2.8}{2017/05/01}{\cs{@rightfixht}を追加}
+%\else
+% \emph{Added by the Japanese \TeX\ development community}:
+% |\@rightfixht| is used to store the height of the right column.
+%\fi
+% \begin{macrocode}
+\global\newdimen\@rightfixht
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@combinefloats}
+%\ifJAPANESE
+% \changes{v2.4}{2001/07/23}{\cs{boxmaxdepth}を\cs{maxdepth}にしないようにした}
+% |\@combinefloats|は、カラム単位で、テキストとフロートをマージする。
+% このマクロは右カラムのときに実行する。
+%\else
+% This macro is executed in the right column.
+%\fi
+% \begin{macrocode}
+\def\@combinefloats{%
+ %%\boxmaxdepth\maxdepth
+ \if@twocolumn
+ \if@firstcolumn
+ \else
+% \end{macrocode}
+%\ifJAPANESE
+% 左カラムのテキスト、上下のカラム幅フロート、上下の段抜きフロートの高さの
+% 合計を|\@fixht|に格納する。
+%\else
+% Store the total height of left column text, upper and lower column width float,
+% upper and lower double column float height in |\@fixht|.
+%\fi
+% \begin{macrocode}
+ \@fixht\ht\@leftcolumn \advance\@fixht\dp\@leftcolumn
+ \@chkdblfloatht \@tempdima\@floatht
+ \L@chkfloatht \advance\@tempdima\@floatht
+ \advance\@fixht\@tempdima
+% \end{macrocode}
+%\ifJAPANESE
+% |\@fixht|の高さが|\textheight|よりも大きい場合、テキストを分割し、入らない
+% 部分を右カラムに移す。
+%\else
+% If |\@fixht| is greater than |\textheight|, split the text and
+% transfer the remaining to the right column.
+%\fi
+% \begin{macrocode}
+ \ifdim\@fixht>\textheight
+% \end{macrocode}
+%\ifJAPANESE
+% 左カラムに残す部分の高さを|\@fixht|に格納する。
+%\else
+% Stores the height of the part left in the left column in |\@fixht|.
+%\fi
+% \begin{macrocode}
+ \@fixht\textheight
+ \advance\@fixht-\@tempdima
+ \advance\@fixht\maxdepth
+% \end{macrocode}
+%\ifJAPANESE
+% |\@fixht|分のテキストをボックス0に格納する。
+%\else
+% Store the text of height |\@fixht| in box 0.
+%\fi
+% \begin{macrocode}
+ \vbadness=\@M \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \setbox\z@=\vsplit\@leftcolumn to\@fixht
+% \end{macrocode}
+%\ifJAPANESE
+% 移動する部分は|\@leftcolumn|に残っているので、
+% それを右カラム(|\@outputbox|)に入れる。
+% また、ボックス0の内容を左カラムに戻す。
+% \changes{v2.4}{2001/02/19}{行間が揃わない部分を修正}
+% \changes{v2.4}{2001/02/19}{柱が出ないのを修正}
+% \changes{v2.8}{2017/05/01}{\cs{@outputbox}を作るときの
+% \texttt{to \cs{@fixht}}の高さ指定をやめた}
+%\else
+% Since the part to be moved remains in |\@leftcolumn|,
+% place it in the right column (|\@outputput|).
+% Also, return the contents of box 0 to the left column.
+%\fi
+% \begin{macrocode}
+ \advance\@fixht-\maxdepth
+ \@tempdima\baselineskip \advance\@tempdima-\topskip
+ \setbox\@outputbox=\vbox{%
+ \ifvoid\@leftcolumn
+ \else
+ \unvbox\@leftcolumn\vskip\@tempdima
+ \fi\relax
+ \unvbox\@outputbox}% \vss moved from here
+% \end{macrocode}0
+%\ifJAPANESE
+% \changes{v2.5}{2001/09/14}{\cs{vsplit}時、infiniteエラーになるのを修正}
+% |\@leftcolumn|を作成するときに用いていた|\vss|が
+%
+% The |\vss| used to create |\@leftcolumn|
+%\begin{verbatim}
+% ! Infinite glue shrinkage found in box being split.
+%\end{verbatim}
+% のエラーを起こすことがあるので削除した。
+%
+% \emph{日本語\TeX{}開発コミュニティによる修正}:
+% この場所のすぐ上にあるコードの|\unvbox\@outputbox|の直後にあった|vss|を
+% こちらに持ってきました。
+% \changes{v2.8}{2017/05/01}{\cs{vss}の位置を移動}
+%\else
+% \emph{Modified by the Japanese \TeX{} development community}:
+% the |\vss| that was immediately after |\unvbox\@outputbox|
+% of the code immediately above this location was moved here.
+%\fi
+% \begin{macrocode}
+ \setbox\@leftcolumn=\vbox to\@fixht{\unvbox\z@\vss}% to here (2017/05/01)
+ \fi
+% \end{macrocode}
+%\ifJAPANESE
+% 左カラムのテキストサイズに左カラムに入るフロートの高さを加えることで、
+% 左カラムの高さを|\@fixht|に格納します。
+%\else
+% Stores the height of the left column in |\@fixht|,
+% by adding the height of the float that enters the left column to
+% the text height of the left column.
+%\fi
+% \begin{macrocode}
+ \@fixht\ht\@leftcolumn
+ \advance\@fixht\dp\@leftcolumn \advance\@fixht\@floatht
+% \end{macrocode}
+%\ifJAPANESE
+% \emph{日本語\TeX{}開発コミュニティによる追加}:
+% 右カラムについても同様に処理します。これで、古くからあった
+% 右カラムとフロートが重なるバグを解消しました。
+% \changes{v2.8}{2017/05/01}{右カラム用の処理を丸ごと追加}
+%\else
+% \emph {Added by the Japanese \TeX\ development community}:
+% Process the right column as well.
+% Fixed a longstanding bug where the right column overlapped with the float.
+%\fi
+% \begin{macrocode}
+ \@rightfixht\ht\@outputbox \advance\@rightfixht\dp\@outputbox
+ \@chkdblfloatht \@tempdima\@floatht
+ \R@chkfloatht \advance\@tempdima\@floatht
+ \advance\@rightfixht\@tempdima
+ \ifdim\@rightfixht>\textheight
+ \@rightfixht\textheight
+ \advance\@rightfixht-\@tempdima
+ \advance\@rightfixht\maxdepth
+ \vbadness=\@M \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \setbox\z@=\vsplit\@outputbox to\@rightfixht
+ \advance\@rightfixht-\maxdepth
+ \unvbox\@outputbox
+ \setbox\@outputbox=\vbox to\@rightfixht{\unvbox\z@\vss}%
+ \fi
+ \@rightfixht\ht\@outputbox
+ \advance\@rightfixht\dp\@outputbox \advance\@rightfixht\@floatht
+% \end{macrocode}
+%\ifJAPANESE
+% 左右、それぞれテキストとカラム幅フロートを組み立てる。
+%\else
+% Assemble text and column width floats, for left and right respectively.
+%\fi
+% \begin{macrocode}
+ \ifx\L@toplist\@empty\else\L@cflt\fi
+ \ifx\L@botlist\@empty\else\L@cflb\fi
+ \ifx\R@toplist\@empty\else\R@cflt\fi
+ \ifx\R@botlist\@empty\else\R@cflb\fi
+ \fi
+% \end{macrocode}
+%\ifJAPANESE
+% 二段組でないときは従来どおりの動作をする。
+%\else
+% When it is not a two-column float, it operates as usual.
+%\fi
+% \begin{macrocode}
+ \else
+ \ifx\@toplist\@empty\else\@cflt\fi
+ \ifx\@botlist\@empty\else\@cflb\fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\L@cflt}
+% \begin{macro}{\L@cflb}
+% \begin{macro}{\R@cflt}
+% \begin{macro}{\R@cflb}
+%\ifJAPANESE
+% 左カラムと右カラムを組み立てるのに用いる。
+%
+% \emph{日本語\TeX{}開発コミュニティによる追加}:
+% 左カラムでは|\@fixht|、右カラムでは|\@rightfixht|の高さになるように
+% します。また、|\@colht|をこれらの高さに更新します。
+% \changes{v2.3}{2000/12/20}{\cs{gdef}を\cs{global}\cs{let}に変更}
+% \changes{v2.8}{2017/05/01}{右カラムでは\cs{@rightfixht}の高さで
+% 組み立て、\cs{@colht}も更新するようにした}
+%\else
+% Used to assemble left and right columns.
+%
+% \emph {Added by the Japanese \TeX\ development community}:
+% Update the height of |\@fixht| in the left column,
+% |\@rightfixht| in the right column.
+% Also update |\@colht| to these heights.
+%\fi
+% \begin{macrocode}
+\def\L@cflt{%
+ \let\@elt\@comflelt\setbox\@tempboxa\vbox{}\L@toplist
+ \setbox\@leftcolumn\vbox to\@fixht{\boxmaxdepth\maxdepth
+ \unvbox\@tempboxa
+ \vskip-\floatsep\topfigrule\vskip\textfloatsep\unvbox\@leftcolumn
+ \vss}%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\L@toplist}\global\let\L@toplist\@empty
+ \@colht\@fixht
+}
+\def\L@cflb{%
+ \let\@elt\@comflelt\setbox\@tempboxa\vbox{}\L@botlist
+ \setbox\@leftcolumn\vbox to\@fixht{\boxmaxdepth\maxdepth
+ \unvbox\@leftcolumn
+ \vskip\textfloatsep\botfigrule\unvbox\@tempboxa\vskip-\floatsep
+ \vss}%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\L@botlist}\global\let\L@botlist\@empty
+ \@colht\@fixht
+}
+\def\R@cflt{%
+ \let\@elt\@comflelt\setbox\@tempboxa\vbox{}\R@toplist
+ \setbox\@outputbox\vbox to\@rightfixht{\boxmaxdepth\maxdepth
+ \unvbox\@tempboxa
+ \vskip-\floatsep\topfigrule\vskip\textfloatsep\unvbox\@outputbox
+ \vss}%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\R@toplist}\global\let\R@toplist\@empty
+ \@colht\@rightfixht
+}
+\def\R@cflb{%
+ \let\@elt\@comflelt\setbox\@tempboxa\vbox{}\R@botlist
+ \setbox\@outputbox\vbox to\@rightfixht{\boxmaxdepth\maxdepth
+ \unvbox\@outputbox
+ \vskip\textfloatsep\botfigrule\unvbox\@tempboxa\vskip-\floatsep
+ \vss}%
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\R@botlist}\global\let\R@botlist\@empty
+ \@colht\@rightfixht
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@combinedblfloats}
+%\ifJAPANESE
+% テキストと段抜きフロートをマージする。このパッケージでは、ページ下部の
+% 段抜きフロートもマージするように拡張している。
+%\else
+% Merge text and float.
+% In this package, double column float at the bottom of the page are also merged.
+%\fi
+% \begin{macrocode}
+%\def\@comdblflelt#1{\setbox\@tempboxa
+% \vbox{\unvbox\@tempboxa\box#1\vskip\dblfloatsep}}
+%
+\def\@combinedblfloats{%
+ \ifx\@dbltoplist\@empty
+ \else
+ \let\@elt\@comdblflelt\setbox\@tempboxa\vbox{}\@dbltoplist
+ \setbox\@outputbox\vbox{\boxmaxdepth\maxdepth
+ \unvbox\@tempboxa
+ \vskip-\dblfloatsep
+ \dblfigrule
+ \vskip\dbltextfloatsep
+ \box\@outputbox}%
+ \let\@elt\relax\xdef\@freelist{\@freelist\@dbltoplist}%
+ \global\let\@dbltoplist\@empty
+ \fi
+ \ifx\@dblbotlist\@empty
+ \else
+ \let\@elt\@comdblflelt\setbox\@tempboxa\vbox{}\@dblbotlist
+ \setbox\@outputbox\vbox{\boxmaxdepth\maxdepth
+ \box\@outputbox
+ \vskip\dbltextfloatsep
+ \dblfigrule
+ \unvbox\@tempboxa
+ \vskip-\dblfloatsep
+ }%
+ \let\@elt\relax\xdef\@freelist{\@freelist\@dblbotlist}%
+ \global\let\@dblbotlist\@empty
+ \fi
+ \global\setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\ifJAPANESE
+% \subsection{二段組の出力}
+%\else
+% \subsection{Output of two columns}
+%\fi
+%
+% \begin{macro}{\if@balance}
+%\ifJAPANESE
+% 左右のカラムを均等にして出力するかどうかを示すフラグ。
+%\else
+% Flag indicating whether the left and right columns are to be balanced.
+%\fi
+% \begin{macrocode}
+\newif\if@balance \@balancefalse
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@outputdblcol}
+%\ifJAPANESE
+% 左右のカラムを連結し、出力するのは|\@outputdblcol|が行なう。
+% このパッケージでは、左右のカラムを均等に分割するためのルーチンを加えてある。
+%\else
+% Concatenate left and right columns and output them by |\@outputdblcol|.
+% In this package, a routine for equally dividing the left and right
+% columns has been added.
+%\fi
+% \begin{macrocode}
+\newbox\@combinebox
+% \end{macrocode}
+%\ifJAPANESE
+% 左カラムを組み立てただけの時点では、それを|\@leftcolumn|に格納するだけで
+% 出力はしない。
+% \changes{v2.4}{2001/02/19}{最終ページで左右の行間が揃わない部分を修正}
+% \changes{v2.4}{2001/02/19}{柱が出ないのを修正}
+%\else
+% Just store the assembled left column in |\@leftcolumn|,
+% do not output it yet.
+%\fi
+% \begin{macrocode}
+\def\@outputdblcol{%
+ \if@firstcolumn
+ \global\@firstcolumnfalse
+ \global\setbox\@leftcolumn\box\@outputbox
+ \@colht\textheight
+ \@chkdblfloatht\global\advance\@colht-\@floatht
+ \else
+ \global\@firstcolumntrue
+% \end{macrocode}
+%\ifJAPANESE
+% ここからが左右カラムを均等に分割するコード。
+%\else
+% Here starts the code that balances the left and right columns.
+%\fi
+% \begin{macrocode}
+ \if@balance
+ \@tempdima\baselineskip
+ \advance\@tempdima-\topskip
+ \setbox\@combinebox=\vbox{%
+ \unvbox\@leftcolumn\vskip\@tempdima\unvbox\@outputbox}%
+ \@tempdima\ht\@combinebox
+ \advance\@tempdima\dp\@combinebox
+ \divide\@tempdima\tw@
+ \vbadness=\@M \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \setbox\@leftcolumn=\vsplit\@combinebox to\@tempdima
+ \setbox\@outputbox=\vtop{\unvbox\@combinebox}
+ \setbox\@leftcolumn=\vtop{\unvbox\@leftcolumn}
+ \fi
+% \end{macrocode}
+%\ifJAPANESE
+% 整形する。
+%\else
+% Format it.
+%\fi
+% \begin{macrocode}
+ \@tempdima\ht\@leftcolumn
+ \setbox\@outputbox\vbox to\@tempdima{%
+ \hb@xt@\textwidth{%
+ \hb@xt@\columnwidth{%
+ \vbox to\@tempdima{\box\@leftcolumn\vss}\hss}%
+ \hfil
+ \vrule width\columnseprule
+ \hfil
+ \hb@xt@\columnwidth{%
+ \vbox to\@tempdima{\box\@outputbox\vss}\hss}%
+ }%
+ \vss
+ }%
+ \@combinedblfloats
+ \@outputpage
+ \begingroup
+ \@dblfloatplacement
+ \@startdblcolumn
+ \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}%
+ \endgroup
+ \fi
+ \global\@balancefalse
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@startdblcolumn}
+%\ifJAPANESE
+% 二段組を開始するとき、まだ出力をしていないフロートを出力する。
+% それらは|\@sdblcolelt|を通じて、|\@addtonextcol|で出力される。
+% このパッケージでは、カラムの高さを|\textheight|からフロートの高さを
+% 引いたものに設定するように再定義する。
+%\else
+% When starting a two-column page, output a float that has not yet been output.
+% They are output by |\@addtonextcol| via |\@sdblcolelt|.
+% In this package, update the height of the column
+% by subtracting the height of the float from |\textheight|.
+%\fi
+% \begin{macrocode}
+\def\@startdblcolumn{%
+ \global\@colht\textheight
+ \@tryfcolumn\@dbldeferlist
+ \if@fcolmade
+ \else
+ \begingroup
+ \let\reserved@b\@dbldeferlist
+ \global\let\@dbldeferlist\@empty
+ \let\@elt\@sdblcolelt
+ \reserved@b
+ \endgroup
+ \fi
+ \@chkdblfloatht
+ \global\advance\@colht-\@floatht
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@doclearpage}
+%\ifJAPANESE
+% 出力フロート用リストの初期化をするために、|\@doclearpage|を再定義する。
+%\else
+% Redefine |\@doclearpage| to initialize output float list.
+%\fi
+% \begin{macrocode}
+\def\@doclearpage{%
+ \ifvoid\footins
+ \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
+ \setbox\@tempboxa\box\@cclv
+ \xdef\@deferlist{%
+ \L@toplist\R@toplist\L@botlist\R@botlist\@deferlist}%
+ \global\let\L@toplist\@empty % changed from \@toplist
+ \global\let\R@toplist\@empty % added
+ \global\let\L@botlist\@empty % changed from \@botlist
+ \global\let\R@botlist\@empty % added
+ \global\@colroom\@colht
+ \ifx\@currlist\@empty
+ \else
+ \@latexerr{Float(s) lost}\@ehb
+ \global\let\@currlist\@empty
+ \fi
+ \@makefcolumn\@deferlist
+ \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}%
+ \if@twocolumn
+ \if@firstcolumn
+ % added \@dblbotlist
+ \xdef\@dbldeferlist{\@dbltoplist\@dblbotlist\@dbldeferlist}%
+ \global\let\@dbltoplist\@empty
+ \global\let\@dblbotlist\@empty % added
+ \global\@colht\textheight
+ \begingroup
+ \@dblfloatplacement
+ \@makefcolumn\@dbldeferlist
+ \@whilesw\if@fcolmade \fi{\@outputpage
+ \@makefcolumn\@dbldeferlist}%
+ \endgroup
+ \else
+ \vbox{}\clearpage
+ \fi
+ \fi
+ \else
+ \setbox\@cclv\vbox{\box\@cclv\vfil}%
+ \@makecol\@opcol
+ \clearpage
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@topnewpage}
+%\ifJAPANESE
+% |\@dblbotroom|と|dblbotnumber|を初期化するために|\@topnewpage|を再定義する。
+%\else
+% Redefine |\@topnewpage| to initialize |\@dblbotroom| and |dblbotnumber|.
+%\fi
+% \begin{macrocode}
+\long\def\@topnewpage[#1]{%
+ %\@nodocument
+ \@next\@currbox\@freelist{}{}%
+ \global\setbox\@currbox
+ \color@vbox
+ \normalcolor
+ \vbox{\hsize\textwidth
+ \@parboxrestore
+ \col@number\@ne
+ #1%
+ \vskip-\dbltextfloatsep}%
+ \color@endbox
+ \ifdim\ht\@currbox>\textheight
+ \ht\@currbox\textheight
+ \fi
+ \global\count\@currbox\tw@
+ \@tempdima-\ht\@currbox
+ \advance\@tempdima-\dbltextfloatsep
+ \global\advance\@colht\@tempdima
+ \ifx\@dbltoplist\@empty
+ \else
+ \@latexerr{Float(s) lost}\@ehb
+ \let\@dbltoplist\@empty
+ \fi
+ \@cons\@dbltoplist\@currbox
+ \global\@dbltopnum\m@ne
+ \global\@dblbotnum\m@ne % added
+ \ifdim\@colht<2.5\baselineskip
+ \@latex@warning@no@line {Optional argument of \noexpand\twocolumn
+ too tall on page \thepage}%
+ \@emptycol
+ \if@firstcolumn
+ \else
+ \@emptycol
+ \fi
+ \else
+ \global\vsize\@colht
+ \global\@colroom\@colht
+ \@floatplacement
+ \fi
+ %\global\@dbltoproom\maxdimen
+ %\global\@dblbotroom\maxdimen
+ %\@addtodblcol
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\balancenewpage}
+% \begin{macro}{\balanceclearpage}
+%\ifJAPANESE
+% テキストを均等に分割して出力するためのマクロ。
+% ただし、このマクロを用いた場合、そのページ内での|\newpage|や
+% |\clearpage|コマンドが無効になることに注意。
+%\else
+% Macro for evenly dividing text and outputting it.
+% However, when using this macro, |\newpage| or |\clearpage|
+% are not allowed on the current page.
+%\fi
+% \begin{macrocode}
+\def\balancenewpage{\par\vfil\global\@balancetrue\penalty-\@M}
+\def\balanceclearpage{\balancenewpage
+ \write\m@ne{}\vbox{}\global\@balancetrue\penalty-\@Mi}
+\endinput
+%</core>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \Finale
+%
+% \endinput
diff --git a/macros/latex/contrib/nidanfloat/nidanfloat.ins b/macros/latex/contrib/nidanfloat/nidanfloat.ins
new file mode 100644
index 0000000000..5f58c92dd6
--- /dev/null
+++ b/macros/latex/contrib/nidanfloat/nidanfloat.ins
@@ -0,0 +1,19 @@
+\input docstrip
+\keepsilent
+\usedir{tex/latex/nidanfloat}
+\ifToplevel{\askonceonly}
+
+\Msg{*** nidangumi double float package ***}
+
+\preamble
+
+Copyright (c) 2010 ASCII MEDIA WORKS
+Copyright (c) 2016-2018 Japanese TeX Development Community
+
+This file is part of nidanfloat community edition.
+-------------------------------------------------------------
+
+\endpreamble
+
+\generate{\file{nidanfloat.sty}{\from{nidanfloat.dtx}{core}}}
+\endbatchfile
diff --git a/macros/latex/contrib/nidanfloat/nidanfloat.pdf b/macros/latex/contrib/nidanfloat/nidanfloat.pdf
new file mode 100644
index 0000000000..466e6edaab
--- /dev/null
+++ b/macros/latex/contrib/nidanfloat/nidanfloat.pdf
Binary files differ