根据所在列的不同,环境的行为也不同

根据所在列的不同,环境的行为也不同

我正在尝试在文档中创建一个环境twocolumn,该环境的行为会根据其所在的列而有所不同。具体来说,我正在制作一个tcolorbox,它应该延伸到页面的边缘,根据框所在的列,边缘可能是左侧也可能是右侧。但是,对于这个问题,条件很重要。

为了做到这一点,我尝试使用该\if@firstcolumn命令。

\documentclass[a4paper, 11pt, twocolumn, twoside]{book}
\usepackage{lipsum}

\usepackage{geometry}
\geometry{a4paper, includeheadfoot,top=0cm, bottom=0cm, headheight=2cm, headsep=0.1cm, footskip=2cm, left=1cm, right=1cm}

\newenvironment{columnbox}{\par\bfseries
  \if@firstcolumn FIRST \else SECOND \fi
}{COLUMN\par}

\begin{document}
\pagestyle{empty}
\lipsum[1]
\begin{columnbox}
\end{columnbox}
\lipsum
\begin{columnbox}
\end{columnbox}
\lipsum
\begin{columnbox}
\end{columnbox}
\lipsum
\begin{columnbox}
\end{columnbox}
\end{document}

然而,这并不起作用;它不会给出正确的值,而是给出\else无论在哪一列的值。

我怀疑我误解了它在序言中的评估和检查方式(并且由于没有列,因此固定为 false?),而不是像我希望的那样在调用环境时进行检查。

实现我想要做的事情的正确方法是什么?

答案1

由于条件是\if@firstcolumn,您需要用\makeatletter...\makeatother一对:

\makeatletter
\newenvironment{columnbox}{% \begin{columnbox}
  \par\bfseries
  \if@firstcolumn FIRST \else SECOND \fi
}{% \end{columnbox}
  COLUMN\par
}
\makeatother

相关内容