我一直在排版一本双栏书,有时我需要在页边空白处做个标记,表示那一行可能需要特别注意。(这本书实际上是一本圣歌集——用于吟诵。)
因为无法\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}