使用 XeLaTeX 的 tikzpicture 中的边注位置错误

使用 XeLaTeX 的 tikzpicture 中的边注位置错误

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}

结果和你的第一张图片一样。

我没有提出重复投票,因为上次我这样做时,有人怀疑情况确实如此。

相关内容