在我的文档中,我有一个侧面捕获环境以及一个用于图形和表格的全宽环境。过去,我的所有文档都打印在页面的背面和正面,因此我在环境中有一个子句来检查页面是奇数还是偶数。
现在我只想在页面的一面打印,因此环境应该检查这一点。我该如何实现这一点?(我使用的是 scrbook)。
\documentclass[a4paper, oneside]{scrbook}
...
\usepackage{realboxes}
\newenvironment{fwfigure}[1][htbp]%
{%
\begin{figure}[#1]
\checkoddpage
\edef\side{\ifoddpage l\else r\fi}% <<<--- Here should another if statement check the *side-mode
\Makebox[\textwidth][\side]\bgroup%
\begin{minipage}[t]{\textwidth+\marginparsep+\marginparwidth}
\centering
}{%
\end{minipage}%
\egroup%
\end{figure}
}
编辑:
我最终这样做了:
\makeatletter
\if@twoside%
\newcommand{\side}{\ifoddpage l\else r\fi} %% twoside=true
\else%
\newcommand{\side}{l} %% twoside=false
\fi%
\makeatother
%%%
\usepackage{realboxes}
\newenvironment{fwfigure}[1][htbp]%
{%
\begin{figure}[#1]
\checkoddpage
\Makebox[\textwidth][\side]\bgroup%
\begin{minipage}[t]{\textwidth+\marginparsep+\marginparwidth}
\centering
}{%
\end{minipage}%
\egroup%
\end{figure}
}
答案1
该测试由 LaTeX 内核提供
\newif \if@twoside \@twosidefalse
因此您可以使用此测试。请注意,测试字符串使用@
/ \makeatletter
(\makeatother
请参阅:\makeatletter 和 \makeatother 起什么作用?)
编辑
David 有一个很好的答案,解释了\newif
命令如何工作
\typearea
正如 egreg 所提到的,每个 KOMA-Class 默认加载的包提供了选项twoside=semi
。在这种情况下,上述条件应该通过进行扩展\if@semitwoside
。
但是,根据您的示例,您可以按如下方式重新定义您的环境:
\makeatletter
%preamble
\if@twoside%
%%% put the stuff for true here (twoside=true)
\newcommand\side{stuff for twoside}
\else%
%%% put the stuff for false here (twoside=false)
\newcommand\side{stuff for onside}
\fi%
\makeatother
\newenvironment{fwfigure}[1][htbp]%
{%
\figure[#1]
\side
\endfigure%
}
答案2
在回忆录类,我尝试\if@twoside
使用@Marco Daniel答案,但它根本没有起作用。它只在我使用以下方法时才起作用:
\ifthenelse{\boolean{@twoside}}{%
%something true
}{%
%something false
}%