让我向您介绍一下我的问题的背景。
我正在开发生成和编译 LaTeX 代码的应用程序。
为了调试目的,我需要它在标准文档内容旁边添加一些附加信息。在理想情况下,这些信息应该不打断自然的文本流,阿珀靠近内容(可能在边缘),可打印并且仅要求一个汇编。
我需要这些调试说明数学、内联数学、部分、表格,有时在里面多色环境。
我尝试过marginpar
几个包,例如todonotes
,,marginnote
具有零高度和重叠的盒子,甚至打印 pdf 注释,但我无法实现我的目标。
到目前为止,marginpars 似乎是最好的,但它们并没有出现在我想要的位置,有时(例如在节之前)会产生额外的垂直间隙。它们还会破坏多列。
包的行为lineno
,在每一行之前添加行号看起来非常好,但我不知道如何适应它。
你有什么线索吗?
答案1
这是使用 的一个可能解决方案\tikzmark
。代码需要运行三次才能稳定下来,但问题的评论中已经取消了关于运行次数的原始限制,因此这不是问题。
该\MarkText
命令有两个强制参数:第一个参数将用于要标记的材料;第二个参数是与标记相关的注释的实际内容;可选参数允许垂直移动注释的内容,以防它离另一个注释太近。
由于注释文本放在里面\node
,您可以根据需要调整节点属性。
下面的示例展示了该命令在几个所需情况下的实际运行情况:多列文本、内联数学、显示数学、常规文本和分段单元标题:
\documentclass{article}
\usepackage{ragged2e}
\usepackage{amsmath}
\usepackage[a5paper,marginparwidth=15mm]{geometry}
\usepackage{multicol}
\usepackage{tikzpagenodes}
\usetikzlibrary{calc}
\definecolor{HLcolor}{RGB}{124,18,18}
\newcommand\tikzmark[1]{%
\tikz[overlay,remember picture,baseline=-0.3ex] \coordinate (#1);}
\newcommand\MarkText[3][0pt]{%
{\tikzmark{e}#2
\begin{tikzpicture}[remember picture, overlay]
\path let \p1 = (e), \p2 = (current page marginpar area.west)
in node[yshift=-#1,text width=\marginparwidth,align=left,anchor=north west,font=\normalfont\small\color{HLcolor},inner ysep=0pt] at (\x2,\y1) {\tikzmark{s}\RaggedRight#3};
\draw[HLcolor] let \p1 = (e), \p2 = (s) in (e) |- ([xshift=-5pt,yshift=0.5ex]s.west);
\end{tikzpicture}%
}%
}
\begin{document}
\section{A \MarkText{Test}{This title must be changed} Section}
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. 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. \MarkText{Praesent}{I really don't understand what you are talking about} eget sem vel leo ultrices bibendum. Aenean
faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Cur-
abitur 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.
\begin{align}
a+b+c &= d+e+f \\
&\MarkText{=}{Should this really be an equality?} g +h \\
&= i.
\end{align}
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. \MarkText{Cum}{I still don't understand} sociis natoque penatibus et
magnis dis parturient montes, nascetur ridiculus mus. Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis. Pellentesque cursus luctus mauris.
\begin{multicols}{2}
Erat ligula aliquet magna,
vitae ornare odio metus a mi. Morbi ac orci et nisl \MarkText[-20pt]{hendrerit}{Something is wrong here} mollis. Donec aliquet, tortor sed accumsan bibendum. Suspendisse
ut massa. Cras nec ante. Pellentesque a nulla. Cum sociis natoque penatibus et
magnis dis parturient montes, nascetur ridiculus mus. Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis. Nulla ullamcorper $f(x)\MarkText{=}{This requires special attention}f(-x)$ vestibulum turpis. Pellentesque cursus luctus mauris.
\end{multicols}
\end{document}