每当定义一个概念时,我都会使用 marginnotes(有时在 mdframed 环境中)在边缘处书写,例如:
\documentclass{article}
\usepackage{marginnote,tikz,mdframed}
\usepackage{amsthm}
\newmdtheoremenv[linecolor=black]{definition}{Definition}
\newcommand{\defi}[1]{%
\marginnote{\tiny #1}%
\emph{#1}}
\begin{document}
\begin{definition}
An \defi{apple} is a fruit, a \defi{mirror} is an object
and a \defi{fish} is an animal.
\end{definition}
\end{document}
唉,当在同一行定义两个或更多事物时,我遇到了问题---在示例中,“苹果”,“镜子”和“鱼”在边缘重叠。
我知道这是一个功能,但想知道是否可以将两次调用的内容合并到 marginnote 中。
(如果将 marginnote 替换为 marginpar ,则会得到“浮动值丢失”的结果。)
理想情况下,我会在页边空白处写上“苹果、镜子、鱼”
我想知道是否可以更改 marginnote 以便
- 当到达 a 时
\marginnote
,它的参数会附加到某个列表(标记?)...理想情况下,添加一些分隔符,例如,
); - 当排版边注时,它会将此标记列表重置为空
我也知道回忆录的高级旁注功能,但我必须坚持使用文章。
作为最后的手段,如果这不可能的话,我正在考虑以下措施:
- 每次
\defi
调用它时都会附加到以逗号分隔的定义列表中; - 使用类似 everypage 的东西然后调用 tikzpicture 将列表覆盖在文档的边缘并重置列表内容
编辑:@TeXnician 提出了一个类似的问题边注自动连接但是 David 的答案有副作用,即在 mdframed 框内添加了注释。(我没有设法运行 Tobi 的答案,但我猜我可能会遇到相同的 Float(s) 丢失问题。)
答案1
您可以尝试类似这样的方法。它仅检查定义(它们的开始)是否在同一行和同一页上。
\documentclass{article}
\usepackage{marginnote}
\usepackage{zref-savepos,zref-abspage}
\usepackage{expl3}
\ExplSyntaxOn\makeatletter
\int_new:N \g_tassio_note_int
\seq_new:N\g_tassio_note_seq
\newcommand{\defi}[1]{%
\int_gincr:N \g_tassio_note_int
\bool_if:nTF
{
\int_compare_p:n
{
\zposy{tassionotepos\int_eval:n{\g_tassio_note_int}}
=
\zposy{tassionotepos\int_eval:n{\g_tassio_note_int +1}}
}
&&
\int_compare_p:n
{
\zref@extractdefault { tassionotepage\int_eval:n{\g_tassio_note_int } }{abspage}{-1}
=
\zref@extractdefault { tassionotepage\int_eval:n{\g_tassio_note_int +1} }{abspage}{-1}
}
}
{
\seq_gput_left:Nn \g_tassio_note_seq {#1}
}
{
\seq_gput_left:Nn \g_tassio_note_seq {#1}
\marginnote{\tiny \seq_use:Nn \g_tassio_note_seq {,~}}%
\seq_gclear:N \g_tassio_note_seq
}
\zref@label {tassionotepage\int_use:N\g_tassio_note_int}\zsaveposy {tassionotepos\int_use:N\g_tassio_note_int}
\emph{#1}}
\ExplSyntaxOff\makeatother
\begin{document}
An \defi{apple} is a fruit, a \defi{mirror} is an object
and a \defi{fish} is an animal.
\\ \defi{duck}
\newpage \defi{snowmann}
\end{document}