我正在尝试在文档中创建一个环境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