我想创建一个新的环境,称为表它采用非常宽的表格(tabularx 环境,由统计软件提供输出),在 tabularx 周围放置一个表格环境(因此表格被计数并列在表格列表等中)并使用 pdflscape 旋转页面。
这很好,但我无法让文本在旋转的页面上浮动。上一页的文本是半空的,然后下一页旋转了 90°,并包含表,然后文本将在下一页再次恢复。
然后我尝试使用\afterpage{}和\清除页强制浮动,遵循以下一些想法这里。
下面,你可以看到我如何尝试创建环境表如下:
\newenvironment{ltable}
{ \afterpage \clearpage
\begin{landscape}%
\begin{table}}
{\end{table}%
\end{landscape}}
所以这样表-环境应该等同于以下内容(请注意,我不知道如何区分 \clearpage 没有花括号,但 \afterpage{} 在定义环境时有花括号,这可能是错误的来源):
\afterpage{
\clearpage
\begin{landscape}
\begin{table}
...
\end{table}
\end{landscape}
}
如果您编译以下 MWE,您将看到文本并没有按照希望的那样在表格周围浮动。
首先,非浮动MWE:
\documentclass{article}
\usepackage{geometry}
\geometry{top=1in, bottom=1in, left=1in, right=1in}
\usepackage{lipsum}% for dummy text
\usepackage{afterpage}
\usepackage{pdflscape}
\usepackage{tabularx}
\usepackage[small,bf]{caption}
\usepackage{graphicx}
\usepackage{calc}
\newenvironment{ltable}
{ \afterpage \clearpage
\begin{landscape}%
\begin{table}}
{\end{table}%
\end{landscape}}
\begin{document}
\lipsum[1-10]
%\afterpage{%
% \clearpage% To flush out all floats, might not be what you want
\begin{ltable}
\makebox[\linewidth][c]{
\begin{tabularx}{\linewidth}{l|X}
\hline \hline
Variable & Description\\ \hline
\emph{lntotalassets}&natural logarithm of total assets\\
%nepro & net income per gross profit\\
\hline \hline
\end{tabularx}
}
% must not include verbatim content
\end{ltable}
%}
\lipsum[1-10]
\end{document}
但是,当我手动添加命令时\afterpage{}和\清除页大约表,同时表仅由景观和桌子,与第二个 MWE 一样,它确实起作用。
第二个浮动MWE:
\documentclass{article}
\usepackage{geometry}
\geometry{top=1in, bottom=1in, left=1in, right=1in}
\usepackage{lipsum}% for dummy text
\usepackage{afterpage}
\usepackage{pdflscape}
\usepackage{tabularx}
\usepackage[small,bf]{caption}
\usepackage{graphicx}
\usepackage{calc}
\newenvironment{ltable}
{% \afterpage \clearpage
\begin{landscape}%
\begin{table}}
{\end{table}%
\end{landscape}}
\begin{document}
\lipsum[1-10]
\afterpage{%
\clearpage% To flush out all floats, might not be what you want
\begin{ltable}
\makebox[\linewidth][c]{
\begin{tabularx}{\linewidth}{l|X}
\hline \hline
Variable & Description\\ \hline
\emph{lntotalassets}&natural logarithm of total assets\\
%nepro & net income per gross profit\\
\hline \hline
\end{tabularx}
}
% must not include verbatim content
\end{ltable}
}
\lipsum[1-10]
\end{document}
我怎样才能把\afterpage{}和\清除页(没有花括号!)放入\新环境,拥有像 MWE 1 一样简短而简洁的命令?
自己的解决方案:忽略要小心使用 afterpage 的评论,我想出了下面的代码来定义环境 wtable,它可以执行我想要的操作(如上所述的序言和 usedpackage,加上包环境):
\def\afterpagebody#1[#2]{%
\afterpage{ \clearpage \begin{landscape} \begin{table}[#2]
#1%
\end{table} \end{landscape}
}}
\NewEnviron{wtable}[1][ht]{%
\expandafter\afterpagebody\expandafter{\BODY}[#1]%%
}
答案1
您可以使用environ
环境的包版本,这使得环境主体可用,以便\BODY
将其全部放入参数中,但我对\afterpage
在生产环境中使用持谨慎态度(参见软件包文档)。
我认为你不需要在这里sidewaystable
使用rotating
\documentclass{article}
\usepackage{geometry}
\geometry{top=1in, bottom=1in, left=1in, right=1in}
\usepackage{lipsum}% for dummy text
%\usepackage{afterpage}
\usepackage{pdflscape}
\usepackage{tabularx}
\usepackage[small,bf]{caption}
\usepackage{graphicx,rotating}
\usepackage{calc}
% force page 3 to rotate in the view
% (a better interface to this could be added)
\makeatletter
\let\old@outputpage\@outputpage
\def\@outputpage{%
% add as many lines like this as needed
\ifnum\value{page}=3 \pdfpageattr\expandafter{\the\pdfpageattr /Rotate 90 }\fi
\old@outputpage}
\makeatother
\begin{document}
\lipsum[1-10]
\begin{sidewaystable}
\begin{tabularx}{\linewidth}{l|X}
\hline \hline
Variable & Description\\ \hline
\emph{lntotalassets}&natural logarithm of total assets\\
%nepro & net income per gross profit\\
\hline \hline
\end{tabularx}
\end{sidewaystable}
\lipsum[1-10]
\end{document}