here.styとtable*の両立について

here.styとtable*の両立について

- 渡部 浩 の投稿
返信数: 6
here.styと二段組み中に一段組の表を挿入する際のtable*が同時に使えません.
ソースファイルは以下の通りです.
------------------------------------
\documentclass[twocolumn]{jsarticle}
\usepackage{here}
\begin{document}
価格は以下の通りです.
\begin{table*}[H]
\centering
\begin{tabular}{c|c} \hline
メニュー & 価格 \\ \hline \hline
牛丼(並) & 380円 \\ \hline
牛丼(大) & 420円 \\ \hline
\end{tabular}
\end{table*}
\end{document}
-------------------------------------
としてコンパイルすると,表が表示されません.この際,table*->tableとするか,H->h等とすると問題なく表示されます.私の環境だけでなく,”TeXを使ってみよう”でも同様の問題が起きました.
どなたか解決策を教えていただければ幸いです.
渡部 浩 への返信

Re: here.styとtable*の両立について

- 和田 勇 の投稿
投稿できなかったので書き直して ...

私が LaTeX を書くときいつも愛用している 1998 年に出版されたアスキー出版の「The LaTeX コンパニオン」の p175 (6章 フロートの達人、6.3.1 フロートを記述した箇所に出力したい場合)からの引用 ...

「意訳して引用開始」
float パッケージ(here は float を読み込んでいます)は、デフォルトで標準の figure 環境と table 環境を修整するわけではない。これらの環境で [H] 指示子を使いたければ \restylefloat{figure} \restyle{table} コマンドを先に指定しておかなければならない
「引用終わり」

ということで  \begin{table*} の前に\restylefloat{table*} を置くと表示されるようになりました。 OSX 10.10 TeXLive 2014 で試しました。

restylefloat table latex で調べると http://stackoverflow.com/questions/1673942/latex-table-positioning のも検索できます。


和田 勇 への返信

Re: here.styとtable*の両立について

- 前田 一貴 の投稿
> 1998 年に出版されたアスキー出版の「The LaTeX コンパニオン」

現在の float パッケージのバージョンは

\ProvidesPackage{float}
        [2001/11/08 v1.3d Float enhancements (AL)]

ですね.ドキュメントを読むと,

This style option provides the [H] specifier for newly defined
classes of floats as well as the predefined figures and tables,
thereby superseding here.

とあります.実際に,次のようにして float を読み込むか読み込まないかを変えてみると,
表の配置場所が変わるので,float を読み込めば既存の table 環境でも [H] 指示子が使える
ようになることがわかります.

\documentclass{jsarticle}
% \usepackage{float}
\begin{document}
\begin{table}[H]
  \centering
  \begin{tabular}{c|c} \hline
    メニュー & 価格 \\ \hline \hline
    牛丼(並) & 380円 \\ \hline
    牛丼(大) & 420円 \\ \hline
  \end{tabular}
\end{table}
\end{document}

また,\restylefloat{table} は table と table* の両方を再定義するようです.
\restylefloat{table*} とやってしまうと,table* が「二段組み中に一段組の表」にならないうえに,
\caption を入れると

! LaTeX Error: No counter 'table*' defined.

と出てしまいます.


そもそも元の質問は,仮に両立できたとしてどう動くべきなのでしょうか.
デフォルトの LaTeX2e では table* などのアスタリスク付きのフロート環境は
[tp] が効くようになっていて,dblfloatfix パッケージを読み込むと [tbp] が
使えるようになるようです.この場合でも [h] は考慮されていないように見えます.

(私はフロートの実装を知らないのもあって,二段組み中の指定された箇所で一段組みの
  表を入れる,という組み方を自動で実現可能なのかどうかよくわからないです.
  できないことはないのではないか,という気はしますが…….調査不足?)
前田 一貴 への返信

Re: here.styとtable*の両立について

- 渡部 浩 の投稿
>>仮に両立できたとしてどう動くべきなのでしょうか

添付したPDFのようなものを作りたいのですが・・・論文だったら確かに後ろにまとめてもいいのでしょうが,解説用なので文章と表をあまり離すわけにもいかないのです.

>>二段組み中の指定された箇所で一段組みの 表を入れる,という組み方を自動で実現可能なのかどうかよくわからないです

multicol.sty というものがあるようですが・・・スタイルファイルはすでに入っているもの以外使ったことがないので,ちょっと試してみます.分からないことがあればまたご教授お願いします.
前田 一貴 への返信

Re: here.styとtable*の両立について

- 渡部 浩 の投稿
---------------------------
\begin{multicols}{2}
本文
\end{multicols}

\begin{table}[H]
表の部分
\end{table}

\begin{multicols}{2}
本文
\end{multicols}
---------------------------
として,表の部分だけ一段組にしてしまえばtable*にする必要がなくなりますが・・・どうもいい方法とは思えません.
渡部 浩 への返信

Re: here.styとtable*の両立について

- 前田 一貴 の投稿
私も何年か前に,この multicol パッケージを使う方法で二段組み中の特定の位置に
一段組みを入れたことがあります.
これ以外にリーズナブルな方法があるのかどうかは,私は知りません.
いちいち multicols 環境を閉じたり開いたりするのが嫌ということならば,
新しい環境を定義して,そこに押し込めることはできそうに思います(何の解決にもなっていない気はしますが).

\documentclass{jsarticle}
\usepackage{multicol,float,etoolbox}
\newenvironment{tablehere}{\begin{table}[H]}{\end{table}}
\BeforeBeginEnvironment{tablehere}{\end{multicols}}
\AfterEndEnvironment{tablehere}{\begin{multicols}{2}}
\begin{document}
\begin{multicols}{2}
  本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文
  本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文
  本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文
  \begin{tablehere}
    \centering
    表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表表
  \end{tablehere}
  本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き
  本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き
  本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き本文続き
\end{multicols}
\end{document}

ただし,multicols 環境中では通常のフロート環境は使えないという制限があるようです.
figure* などは使えますが,必ず次のページ以降に送られます.
これが問題になるようでしたら解決にならないです.