更新 \if@firstcolumn 中间段落

更新 \if@firstcolumn 中间段落

我想调整\marginnote命令(来自marginnote包)以处理twocolumn文档(如\marginparcan,但能够使用它,例如在 内minipage)。为此,我需要知道注释在哪一列。

\marginpar\if@firstcolumn对此的使用(在\@addmarginpar中)。但是,此开关仅在每个段落之后更新,导致段落中的值超出列分隔符。如下面的 MWE 所示,以\marginpar某种方式解决了这个问题。

是否可以更新\if@firstcolumn中间段落?如果不行,我如何确保\marginnote将注释设置在正确的边距中?


\documentclass[twocolumn]{article}
\setlength\columnsep{2cm}

\usepackage{marginnote}

\makeatletter

\long\def\cc#1#2{%
    \begingroup
    \count@=0%
    \loop\ifnum\count@<#1\advance\count@ 1\relax#2\repeat
    \endgroup
}

\begin{document}

\cc{22}{%
    \cc{22}{\if@firstcolumn first \else second \fi}%
    \rule{1em}{1em} \marginpar{\the\count@}%
    \cc{22}{\if@firstcolumn first \else second \fi}%
    \par
}

\end{document}

上面代码的输出。

答案1

您无法有效地更改\if@firstcolumn中间段落,因为段落已完全设置(包括所有宏和测试的扩展\if...),而段落在被分成几行并将这些行分配给列之前被设置为一行。

您可以(例如)使用\pdfsavepos它来记录一个位置并在下一次运行中查看该位置的 x 坐标。

相关内容