使边注出现在两栏、双面文档的两侧,第二部分

使边注出现在两栏、双面文档的两侧,第二部分

这是使边注出现在两栏、双面文档的两侧, 考虑在内\section 之后的 Marginnote:如何防止分页?(主要区别在于使用\strut而不是\needspace)。

在此 MWE 中,注释出现在错误的列中:

\documentclass[twocolumn,twoside]{article}

\usepackage{lipsum}
\usepackage{marginnote}

\makeatletter
\let\oldmarginnote\marginnote
\renewcommand*{\marginnote}[1]{%
    \strut%
    \begingroup%
        \ifodd\value{page}
            \if@firstcolumn\reversemarginpar\fi
        \else
            \if@firstcolumn\else\reversemarginpar\fi
        \fi
        \oldmarginnote{#1}%
    \endgroup%
}
\makeatother


\begin{document}
    \lipsum[4-6]
    \lipsum[6]
    \marginnote{Note on wrong column}
    Text with note
\end{document}

这似乎是 的一个问题\if@firstcolumn。如何修复?

答案1

您的代码无法运行,并且您链接的答案是错误的。可以通过以下示例看到问题:

\documentclass[twocolumn,twoside]{article}

\usepackage{lipsum}
\usepackage{marginnote}
\makeatletter
\let\oldmarginnote\marginnote
\renewcommand*{\marginnote}[1]{%
 \begingroup\strut
     \if@firstcolumn
      \reversemarginpar
      \oldmarginnote{first #1}%
     \else
      \normalmarginpar
      \oldmarginnote{second #1}%
     \fi
 \endgroup%
}
\makeatother


\begin{document}
    blalla\marginnote{text 1}
    \lipsum[4-6]
    \lipsum[6]

    \marginnote{text 2}%
    Text with note

    \marginnote{text 3}%
    Text with note
\end{document}

由于 tex 的异步页面构建,边注“测试 2”认为它位于第 1 列。

正确检测当前列并不容易(参见例如检测多列中的当前列)。

在您的情况下,您可以使用 zref-savepos(我通过查看辅助中的“stop”和“start2”的位置找到了值 19000000。这可以改进):

\documentclass[twocolumn,twoside]{article}

\usepackage{lipsum}
\usepackage{marginnote,zref-savepos}
\newcounter{labelnote}
\makeatletter
\let\oldmarginnote\marginnote
\renewcommand*{\marginnote}[1]{%
 \begingroup\strut
  \stepcounter{labelnote}\zsaveposx {marginnote-\thelabelnote}
     \ifnum 0\zposx{marginnote-\thelabelnote}<19000000
      \reversemarginpar
      \oldmarginnote{first #1}%
     \else
      \normalmarginpar
      \oldmarginnote{second #1}%
     \fi
 \endgroup%
}
\makeatother


\begin{document}
    %\noindent\zsaveposx{start}x\hfill y\zsaveposx{stop}

    blalla\marginnote{text 1}
    \lipsum[4-6]
    \lipsum[6]

    \marginnote{text 2}%
    Text with note

    \marginnote{text 3}%
    Text with note

    %\noindent\zsaveposx{start2}x\hfill y\zsaveposx{stop2}
\end{document}

答案2

Tikz[记住图片,叠加]通过每次将原点和页码写入辅助文件来提供准确的位置信息。因此,需要运行两次才能使其正常工作。

\documentclass[twocolumn,twoside]{article}
\usepackage{lipsum}
\usepackage{marginnote}
\usepackage{tikzpagenodes}

\newlength{\tempdima}
\newcount{\tikzpage}

\makeatletter
\let\oldmarginnote\marginnote
\renewcommand*{\marginnote}[1]{%
  \begin{tikzpicture}[remember picture, overlay]%
    \pgfextractx{\tempdima}{\pgfpointanchor{current page text area}{center}}%
    \global\tempdima=\tempdima
    \global\tikzpage=\oddpage@page
  \end{tikzpicture}%
  \begingroup
    \ifodd\tikzpage\relax
      \ifdim\tempdima>0pt \reversemarginpar\fi
    \else
      \ifdim\tempdima<0pt \reversemarginpar\fi
    \fi
  \oldmarginnote{#1}%
  \endgroup% resets \reversemarginpar
}
\makeatother

\begin{document}
    \marginnote{left}
    \lipsum[4-6]
    \lipsum[6]
    \marginnote{right}
    Text with note
\end{document}

相关内容