多列环境中的边注

多列环境中的边注

我一直在排版一本双栏书,有时我需要在页边空白处做个标记,表示那一行可能需要特别注意。(这本书实际上是一本圣歌集——用于吟诵。)

因为无法\marginpar在环境中使用multicol,所以我改用 \marginnote包中的注释marginnote。问题是,所有边距注释都出现在页面的外边距中。我需要每个注释都出现在它所在的列旁边 - 一些在内边距,一些在外边距 - 以紧密匹配有问题的行。

有什么办法可以实现这个吗?我彻底搜索了互联网,但没有找到任何相关内容...

\documentclass{article}

\usepackage{multicol}
\usepackage{marginnote}

\begin{document}
\begin{multicols}{2}

Some text, a very long one.

And somewhere in the middle of it I need a (very small) margin note, like this:

Text text text\marginnote{\textbf{!}} and more text...

\end{multicols}
\end{document}

答案1

可以用来 \pdfsavepos检测标记是在左列还是右列。最好使用 Heiko Oberdiek 的zref包。

由于我们可以获得x-position标记的实际值(以单位为sp单位),因此我们可以使用它来检测我们是在左列还是右列。

下面显示的是一个稍微简单的实现。

\documentclass{article}
\usepackage{multicol,zref-savepos}
\def\putmarginpar#1#2{%
  \zsavepos{#1}%
  \ifnum20432158>\number\zposx{#1}%
     \hbox to 0pt{\hskip\dimexpr-\zposx{#1}sp +0.5cm \relax#2}%
  \else
      \hbox to 0pt{\hskip4cm #2}%
  \fi%
}
\parskip0pt
\begin{document}
\begin{multicols}{2}

Testing \footnotemark\putmarginpar{a:1}{First} of something that is very long and if  it need be can be set somewhere\footnotemark \putmarginpar{a:2}{Second}, where it can be subsequently found or lost\footnotemark \putmarginpar{a:3}{Third.}

\zsavepos{dd}\zposx{dd}
\end{multicols}

\end{document}

您可能需要多次运行该示例才能稳定位置。这对 和 都pdfLaTeX有效XeLaTeX

在此处输入图片描述

MWE 取决于实际使用的几何形状,但可以自动计算。此外,为了清晰起见,框也保持简单。替换:

\hbox to 0pt{\hskip4.2cm {\vtop to 0pt{\parindent0pt\hsize 2cm#2}}}

将允许插入段落。

答案2

自动将边注放在正确的一侧在最好的情况下也是有问题的,而多列平衡使这变得更加困难。同样,移动边注以避免它们发生冲突的功能也是如此。如果您放弃这些功能并手动选择要使用哪一列,并通过手动移动其中一个注释来修复任何冲突,事情会变得更容易,并且您可以轻松地将内容添加到列中,而不会过多地扰乱多列:

在此处输入图片描述

\documentclass{article}

\usepackage{multicol}
\makeatletter

\def\xmarginnote{%
  \xymarginnote{\hskip -\marginparsep \hskip -\marginparwidth}}

\def\ymarginnote{%
  \xymarginnote{\hskip\columnwidth \hskip\marginparsep}}

\long\def\xymarginnote#1#2{%
\vadjust{#1%
\smash{\vtop{{%
        \hsize\marginparwidth
        \@parboxrestore
        \@marginparreset
#2}}}}}

\begin{document}
\begin{multicols}{2}

Some text, a very long one.

And somewhere\xmarginnote{\textbf{!1}}  in the middle of it
I need a (very small) margin note, like this:

Text text text\ymarginnote{\textbf{!2}} and more text...

\end{multicols}
\end{document}

相关内容