该marginnote
软件包提供了\marginnote
宏。我在tikzpicture
环境中使用它来将注释放入边距中。
虽然使用 pdfLaTeX 编译时这可以正常工作,但在使用 XeLaTeX 编译时会导致水平偏移。
考虑以下 MWE:
\documentclass{article}
\usepackage{marginnote}
\usepackage{tikz}
\usepackage[showframe]{geometry}
\begin{document}
This line\marginnote{ABC} contains a margin note.
\begin{tikzpicture}
\fill[red] (-1,-1) rectangle (1,1);
\node[right] at (1,0) {This line\marginnote{ABC} contains a margin note.};
\end{tikzpicture}
\end{document}
使用 pdfLaTeX(在 Windows 上使用 MiKTeX)进行编译(两次)得到预期结果:
使用 XeLaTeX 进行编译(在 Windows 上使用 MiKTeX)会对里面的第二个音符进行移位tikzpicture
:
可以修改此代码以正确编译 pdfLaTeX 和 XeLaTeX 吗?
答案1
再次,解决方案从这里,这只是从 复制定义pgfsys-common-pdf-via-dvi.def
。
% !TEX program = XeLaTeX
\documentclass{article}
\usepackage{marginnote}
\usepackage{tikz}
\usepackage[showframe]{geometry}
\begin{document}
\makeatletter
\def\pgfsys@hboxsynced#1{%
{%
\pgfsys@beginscope%
\setbox\pgf@hbox=\hbox{%
\hskip\pgf@pt@x%
\raise\pgf@pt@y\hbox{%
\pgf@pt@x=0pt%
\pgf@pt@y=0pt%
\special{pdf: content q}%
\pgflowlevelsynccm%
\pgfsys@invoke{q -1 0 0 -1 0 0 cm}%
\special{pdf: content -1 0 0 -1 0 0 cm q}% translate to original coordinate system
\pgfsys@invoke{0 J [] 0 d}% reset line cap and dash
\wd#1=0pt%
\ht#1=0pt%
\dp#1=0pt%
\box#1%
\pgfsys@invoke{n Q Q Q}%
}%
\hss%
}%
\wd\pgf@hbox=0pt%
\ht\pgf@hbox=0pt%
\dp\pgf@hbox=0pt%
\pgfsys@hbox\pgf@hbox%
\pgfsys@endscope%
}%
}
\makeatother
This line\marginnote{ABC} contains a margin note.
\begin{tikzpicture}
\fill[red] (-1,-1) rectangle (1,1);
\node[right] at (1,0) {This line\marginnote{ABC} contains a margin note.};
\end{tikzpicture}
\end{document}
结果和你的第一张图片一样。
我没有提出重复投票,因为上次我这样做时,有人怀疑情况确实如此。