作为上一个问题的后续,如何使用 setspace 将表格行距增加一倍?,我发现该解决方案与rotating
包中定义的 sidewaystable 环境不兼容。
我修改了上一个问题答案中的例子来证明:
\documentclass{article}
\usepackage{amsmath}
\usepackage{setspace}
\usepackage{lipsum}
\usepackage{rotating}
\newcommand\Factor{1.9}
\makeatletter
\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
\@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
\@parmoderr\@floatpenalty\z@
\else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
\multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
\@tfor \@tempa :=#2\do
{\if\@tempa h\advance\@tempcnta \@ne\fi
\if\@tempa t\advance\@tempcnta \tw@\fi
\if\@tempa b\advance\@tempcnta 4\relax\fi
\if\@tempa p\advance\@tempcnta 8\relax\fi
}\global\count\@currbox\@tempcnta}\@fltovf\fi
\global\setbox\@currbox\vbox\bgroup
\def\baselinestretch{\Factor}\@normalsize
\boxmaxdepth\z@
\hsize\columnwidth \@parboxrestore}
\makeatother
\begin{document}
\begin{spacing}{\Factor}
\lipsum[1]
\begin{sidewaystable}[ht]
\begin{tabular}{rlll}
\hline
& col1 & col2 & col3 \\
\hline
50 & 19 & 7 & 26 \\
100 & 10 & 20 & 29 \\
150 & 1 & 7 & 2 \\
200 & 0 & 0 & 10 \\
\hline
\end{tabular}
\end{sidewaystable}
\end{spacing}
\end{document}
运行pdflatex
此文档会返回错误:
! Extra }, or forgotten \endgroup.
\color@endbox ->\egroup
l.40 \end{sidewaystable}
我怎样才能解决这个问题?
答案1
我不明白。你想双倍行距吗?为什么要写这么多代码?简单地\doublespacing
说\begin{sidewaystable}[ht]
\documentclass{article}
\usepackage{amsmath}
\usepackage{setspace}
\usepackage{lipsum}
\usepackage{rotating}
%
\begin{document}
\lipsum[1]
\begin{sidewaystable}[ht]
\doublespacing %%% <--- here
\begin{tabular}{rlll}
\hline
& col1 & col2 & col3 \\
\hline
50 & 19 & 7 & 26 \\
100 & 10 & 20 & 29 \\
150 & 1 & 7 & 2 \\
200 & 0 & 0 & 10 \\
\hline
\end{tabular}
\end{sidewaystable}
\end{document}
更新:
如果您想从序言中控制事物,您可以使用etoolbox
以下包:
\documentclass{article}
\usepackage{amsmath}
\usepackage{setspace}
\usepackage{lipsum}
\usepackage{rotating}
\usepackage{etoolbox} %%% <----here
\AtBeginEnvironment{tabular}{\doublespacing} %%% <---- and here
%
\begin{document}
\lipsum[1]
\begin{sidewaystable}[ht]
\begin{tabular}{rlll}
\hline
& col1 & col2 & col3 \\
\hline
50 & 19 & 7 & 26 \\
100 & 10 & 20 & 29 \\
150 & 1 & 7 & 2 \\
200 & 0 & 0 & 10 \\
\hline
\end{tabular}
\end{sidewaystable}
\end{document}
在环境之前tabular
,我们已经发出了命令\doublespacing
。但这种方法会影响所有tabular
环境。
答案2
我同意另一个答案,重新定义是没有必要的,尤其是重新定义像浮点处理这样的核心 LaTeX 功能似乎非常勇敢。
但是你得到错误,因为你有
\global\setbox\@currbox\vbox\bgroup
上个千年的 LaTeX2.09 就是这样的。LaTeX2e 的\@xfloat
ends定义
\global \setbox\@currbox
\color@vbox
\normalcolor
\vbox \bgroup
\hsize\columnwidth
\@parboxrestore
\@floatboxreset
}
这意味着,如果您color
加载了该包,那么您的重新定义的组数就会错误,并且不是颜色安全的,因此您会得到:
! Extra }, or forgotten \endgroup.
\color@endbox ->\egroup