单/双柱检测

单/双柱检测

我正在编写多个文档,例如paper.texreport.texbook.tex。它们都有不同的格式,例如单列/双列、横向/纵向等。

所有这些(类似包装器)文档 tex 文件都包含一个名为“ content.tex”的核心内容文件。因此,此内容会根据包装器 tex 文件声明的不同格式进行格式化。

问题是:我希望里面有一个表格content.tex,它只以单列全纸宽度和横向模式显示,而不管包装器 tex 的设置。

可能的?

尝试过:在此表之前,我可以说\onecolumn。但在表的末尾,我不知道是否将其重置为\onecolumn\twocolumn因为content.tex不知道是谁包括它。

答案1

单/双柱检测

LaTeX 维护着一个\if@twocolumn用于切换两列模式的开关。在索引的定义中可以找到一个检测列模式并恢复先前设置的示例,例如article.cls

\newenvironment{theindex}{%
  \if@twocolumn
    \@restonecolfalse
  \else
    \@restonecoltrue
  \fi
  \twocolumn[\section*{\indexname}]%
  ...
}{%
  \if@restonecol
    \onecolumn
  \else
    \clearpage
  \fi
}

以类似的方式,可以定义一个环境来将其内容设置为一列模式:

\makeatletter
\newenvironment{one-column}{%
  \if@twocolumn
    \def\restorecolumnmode{\twocolumn\relax}%
    \onecolumn
  \else
    \def\restorecolumnmode{\clearpage}%
  \fi
}{%
  \restorecolumnmode
}

检测landscape设置

如果landscape设置了选项(类选项、包geometry,...),则纸张宽度大于纸张高度,可以通过比较来检测\ifdim

\ifdim\paperwidth>\paperheight
  % landscape setting
\else
  % portrait setting
\fi

相关内容