我想调整\marginnote
命令(来自marginnote
包)以处理twocolumn
文档(如\marginpar
can,但能够使用它,例如在 内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 坐标。