在 \newenvironment 中合并 \command、\command{} 和 \begin{environment}\end{environment}

在 \newenvironment 中合并 \command、\command{} 和 \begin{environment}\end{environment}

我想创建一个新的环境,称为它采用非常宽的表格(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}

相关内容