endfloatを使った状態でのカスタム環境

Re: endfloatを使った状態でのカスタム環境

- 匿 名 の投稿
返信数: 0
次のサンプルのようなことをお考えですか?
# 結局,endfloat.sty が figure 環境に対して行っていることを
# ほぼそのまま cfigure 環境に適用しただけですが.

なお,既存の float とは全く別の系統の float も追加(例えば,「写真」用の
photo 環境も追加)して,その追加した環境もまた figure 環境などと同様に
文書末送りにしたい場合には,もう少し手を入れる箇所が増えます.

\documentclass{jarticle}
\usepackage{endfloat}

\makeatletter
\def\@tempa{\newenvironment{cfigure}[1][}
\expandafter\@tempa\fps@figure]
  {\begin{figure}[#1]\centering}
  {\end{figure}}
\def\@tempa{\newenvironment{cfigure*}[1][}
\expandafter\@tempa\fps@figure]
  {\begin{figure*}[#1]\centering}
  {\end{figure*}}

\let\@bcfig\cfigure%%% 「cfigure 環境の開始処理」を別名で保存し……
%%% \cfigure の定義の復元処理を \AtBeginDelayedFloats で設定
\AtBeginDelayedFloats{\let\cfigure\@bcfig}

%%% ファイル endfloat.sty における \figure の定義と同様に
%%% \cfigure/\cfigure* を再定義
\def\cfigure{%
    %%% figure 環境と cfigure 環境は同類なので「fff」(figure 環境を書き出す
    %%% ファイルの拡張子)と「postfig」(図の個数のカウンタ)は
    %%% ファイル endfloat.sty における \figure の定義から変更していません.
    \efloat@condopen{fff}
    \efloat@iwrite{fff}{\string\begin{cfigure}}%
    \if@domarkers%
      \addtocounter{postfig}{1}% % bj
      \figureplace%              % bj
    \fi%
    \def\@currenvir{efloat@float}%
    \begingroup%
    \let\do\ef@makeinnocent \dospecials%
    \ef@makeinnocent\^^L% and whatever other special cases
    \endlinechar`\^^M \catcode`\^^M=12 \ef@xcfigure}% (*)
\@namedef{cfigure*}{\cfigure}
{\catcode`\^^M=12 \endlinechar=-1 %
\gdef\ef@xcfigure#1^^M{\def\test{#1}% (*)
      \ifx\test\ef@endcfiguretest% (*)
          \efloat@foundend{fff}{cfigure}% (*)
      \else\ifx\test\ef@enddblcfiguretest% (*)
          \efloat@foundend{fff}{cfigure}% (*)
      \else%
          \efloat@iwrite{fff}{#1}%
          \let\next\ef@xcfigure% (*)
      \fi \fi \next}%
}%
{\escapechar=-1%
\xdef\ef@endcfiguretest{\string\\end\string\{cfigure\string\}}%      (*)
\xdef\ef@enddblcfiguretest{\string\\end\string\{cfigure*\string\}}%  (*)
}%
%%% (*) のところで,環境名の変更に応じた変更を追加
\makeatother

\begin{document}

\def\Text{これは,意味のないサンプルテキストです.
  これは,意味のないサンプルテキストです.
  これは,意味のないサンプルテキストです.
  これは,意味のないサンプルテキストです.
  これは,意味のないサンプルテキストです.\par}

\Text\Text\Text

\begin{cfigure}
  \fbox{図です}
  \caption{図の例}
\end{cfigure}

\Text\Text\Text

\begin{cfigure*}
  \fbox{これも図です}
  \caption{図の例}
\end{cfigure*}

\Text\Text\Text
\end{document}