我使用 marginpar 将图表和表格放在文档的页边空白处。有时,我最终会在页面底部开始一个长注释,但它会超出底部。为了解决这个问题,我可以在 marginpar 之前添加一些负 vspace。但是,如果编辑将 marginpar 移动到下一页的顶部,它就会开始得太高。因此,当我编辑完文档时,我需要返回并检查每一页,以确保没有任何东西太离谱。
我想做的是添加一个测试来查看 marginpar 是否开始得太高或结束得太低。如果是这样,我会在日志文件中放置一条警告消息。然后我将能够搜索日志文件以查看是否有任何 marginpar 位置不对,并手动修复它们的位置。我如何测试盒子的顶部或底部是否太高或太低?这是一个 MWE:
\documentclass{article}
\usepackage[textheight=8in,textwidth=4in]{geometry}
\usepackage{lipsum}
%\usepackage{ifthen}
\newcommand{\mnote}[2][0ex]{%
\marginpar{\vspace{#1}%
\begin{minipage}[c]{\marginparwidth}
% \ifthenelse{currentlocation.y < texttop}{\typeout{marginpar too high on page \thepage}}{}
#2
% \ifthenelse{currentlocation.y > textbottom}{\typeout{marginpar too low on page \thepage}}{}
\end{minipage}%
}}
\begin{document}
\lipsum[1-4]
A paragraph at the bottom of the page
\mnote{\lipsum[5]}
with a long note that goes too low on the page.
\lipsum[6]
A paragraph at the top of the page
\mnote[-3in]{\lipsum[7]}
where the note has been moved too high up.
\end{document}
答案1
您可以使用\pdfsavepos
原始(或它的新名称,\savepos
如果您使用最新的 luatex)来测试最终的排版位置。
这些值是以页面底部某个参考点为基准的,您可以直接用眼睛调整,也可以使用类似
\pdfsavepos\write20{here=\the\pdflastypos}
在参考点(例如页面的第一行或最后一行)处获取用作边界的数字,\toptest
并\bottest
正如这里发布的那样,它会产生一个日志
Package mnote Warning: marginpar 1 very low on page 1.
Package mnote Warning: marginpar 2 very high on page 2.
\documentclass{article}
\usepackage[textheight=8in,textwidth=4in]{geometry}
\usepackage{lipsum}
%\usepackage{ifthen}
\newcounter{mpcount}
\makeatletter
\newcommand{\mnote}[2][0ex]{%
\marginpar{\vspace{#1}%
\begin{minipage}[c]{\marginparwidth}
\stepcounter{mpcount}%
\strut\pdfsavepos\write\@auxout{\string\toptest{\thempcount}{\thepage}{\the\pdflastypos}}%
#2\ifhmode\unskip\fi
\strut\pdfsavepos\write\@auxout{\string\bottest{\thempcount}{\thepage}{\the\pdflastypos}}%
\end{minipage}%
}}
\def\toptest#1#2#3{\ifnum#3> 50000000
\PackageWarningNoLine{mnote}{marginpar #1 very high on page #2}%
\fi}
\def\bottest#1#2#3{\ifnum#3< 0
\PackageWarningNoLine{mnote}{marginpar #1 very low on page #2}%
\fi}
\makeatother
\begin{document}
\lipsum[1-4]
A paragraph at the bottom of the page
\mnote{\lipsum[5]}
with a long note that goes too low on the page.
\lipsum[6]
A paragraph at the top of the page
\mnote[-3in]{\lipsum[7]}
where the note has been moved too high up.
\end{document}