编辑

编辑

在我的文档中,我有一个侧面捕获环境以及一个用于图形和表格的全宽环境。过去,我的所有文档都打印在页面的背面和正面,因此我在环境中有一个子句来检查页面是奇数还是偶数。

现在我只想在页面的一面打印,因此环境应该检查这一点。我该如何实现这一点?(我使用的是 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
}%

相关内容