我想把 todonotes 不仅仅放在左边或者右边距。我想同时使用两者,并且注释应该自行决定放置在哪里。例如,当注释指向左边距附近的地方时,它应该移到左边距。或者当左边距已满时,它应该使用右边距。
已经存在类似的问题,但我找不到一些也关注 todonotes 包的问题。
答案1
有一种方法可以通过使用zref
包和来实现这一点marginnotes
。这个答案基于这个答案关于在两侧放置节点以及从这个答案关于zref
用法。
这个想法是用来zref
获取待办事项注释“锚点”的水平位置,并检查ifdim
它是否在页面的左侧或右侧。由于所有 x 坐标都写入aux
文件至少两本汇编是必需的。此外,所有这些坐标都需要唯一的标签,因此在下面的 MWE 中\todocount
提供了计数,为每个注释提供了一个标签todo<number>
。辅助文件包含todo<number>
与其posx
坐标(在 sp 中)相关的所有标签。
该命令\mytodo
采用传递给的可选参数和强制参数\todo
,它另外调用\zsafeposx
,\checkxpos
并推进计数器。
20000000
定义中的( )\checkxpos
是估计的页面的中心,实际上,它只是大致在中间,并且有一些关于将zref
位置作为页面上的绝对值的警告。
我不确定这些宏与twopage
文档和其他内容相关的稳定性如何。
如果连接线和所有东西看上去都很乱,那么再运行一次pdflatex
或用其他任何方法都可以修复它。
完整的 MWE 为:
\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage[colorinlistoftodos,textsize=scriptsize]{todonotes}
\usepackage{marginnote}
\usepackage{zref-savepos}
\newcount\todocount
\newcommand{\checkxpos}[3][]{%
\ifdim \zposx{#2}sp < 20000000sp%
\mynote[#1]{#3}%
\else%
\note[#1]{#3}%
\fi%
}
\newcommand{\mytodo}[2][]{%
\zsaveposx{todo\the\todocount}%
\checkxpos[#1]{todo\the\todocount}{#2}%
\global\advance\todocount1\relax
}
\newcommand{\mynote}[2][]{{%
\let\marginpar\marginnote
\reversemarginpar
\renewcommand{\baselinestretch}{0.8}%
\todo[#1]{#2}}}
\newcommand{\note}[2][]{\renewcommand{\baselinestretch}{0.8}\todo[#1]{#2}}
\begin{document}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,\mytodo{the first note} vestibulum ut,
placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero,
nonummy eget, consectetuer id, vulputate a, magna. Donec vehicula augue eu neque.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis
egestas. Mauris ut leo.\mytodo{this is another note} Cras viverra metus rhoncus sem. Nulla et lectus vestibulum
urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida placerat. Integer
sapien est, iaculis in, pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices
bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac,
nulla. Curabitur auctor semper nulla. Donec varius orci eget risus. Duis nibh mi, congue
eu, accumsan eleifend, sagittis quis, diam. Duis eget orci sit amet orci dignissim rutrum.
Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi. Morbi auctor lorem
non justo. Nam lacus libero, pretium at, lobortis vitae, ultricies et, tellus. Donec
aliquet, tortor sed accumsan bibendum, erat ligula aliquet magna, vitae ornare odio
metus a mi. Morbi ac orci et nisl hendrerit mollis. Suspendisse ut massa. Cras nec ante.
Pellentesque a nulla. Cum sociis natoque penatibus et magnis dis parturient montes,
nascetur ridiculus mus.\mytodo{now there would be this} Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis.
Pellentesque cursus luctus mauris.
Nulla malesuada porttitor diam.\mytodo{now this} Donec felis erat, congue non, volutpat at, tincidunt
tristique, libero.\mytodo{and dont forget that} Vivamus viverra fermentum felis. Donec nonummy pellentesque ante.
Phasellus adipiscing semper elit. Proin fermentum massa ac quam. Sed diam turpis,
molestie vitae, placerat a, molestie nec, leo. Maecenas lacinia. Nam ipsum ligula, eleifend
at, accumsan nec, suscipit a, ipsum. Morbi blandit ligula feugiat magna. Nunc eleifend
consequat lorem. Sed lacinia nulla vitae enim. Pellentesque tincidunt purus vel magna.
Integer non enim. Praesent euismod nunc eu purus. Donec bibendum quam in tellus.
Nullam cursus pulvinar lectus. Donec et mi. Nam vulputate metus eu enim. Vestibulum
pellentesque felis eu massa.
\end{document}