如何解决断言失败弹出窗口?

如何解决断言失败弹出窗口?

如何解决“lualatex.exe 断言失败”弹出窗口?(我可以在“忽略”选项卡上退出它)

Heiko Oberdiek 给出了一个完美的解决方案,来回答这个问题如何排版带有长条的同构符号 ($\simeq$)在 pdflatex、xelatex 和之前版本的 lualatex 下运行良好。但在最新版本的 lualatex (texlive 2016) 下,它会弹出断言失败的消息。弹出消息似乎出现在语句

  \sbox0{\lower1.9\dimen@\hbox{$\m@th#1\relbar\isomorphism@joinrel\relbar$}}%

最大重量重量:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass{article}

\makeatletter
\newcommand*{\isomorphism}{%
  \mathrel{%
    \mathpalette\@isomorphism{}%
  }%
}
\newcommand*{\@isomorphism}[2]{%
% Calculate the amount of moving \sim up as in \simeq
  \sbox0{$#1\simeq$}%
  \sbox2{$#1\sim$}%
  \dimen@=\ht0 %
  \advance\dimen@ by -\ht2 %
%----------------------------
% Compose the two symbols
%----------------------------
  \sbox0{%
    \lower1.9\dimen@\hbox{%
      $\m@th#1\relbar\isomorphism@joinrel\relbar$%
    }%
  }%
  \rlap{%
    \hbox to \wd0{%
      \hfill\raise\dimen@\hbox{$\m@th#1\sim$}\hfill
    }%
  }%
  \copy0 %
}
\newcommand*{\isomorphism@joinrel}{%
  \mathrel{%
    \mkern-3.4mu %
    \mkern-1mu %
    \nonscript\mkern1mu %
  }%
}
\makeatother
\begin{document}
\[ A \isomorphism B^{C \isomorphism D^{E \isomorphism F}} \]
\end{document}

答案1

如果在将第二个符号与第一个符号连接时将其作为参数使用,则似乎可以工作。使用 pdfLaTeX 和 LuaLaTeX(或多或少是最新的 TeX Live 2016)进行了测试。

只是不要问我为什么 LuaLaTeX 不喜欢原始版本,而 pdfLaTeX 却喜欢……

\documentclass{article}

\makeatletter
\newcommand*{\isomorphism}{%
  \mathrel{%
    \mathpalette\@isomorphism{}%
  }%
}
\newcommand*{\@isomorphism}[2]{%
% Calculate the amount of moving \sim up as in \simeq
  \sbox0{$#1\simeq$}%
  \sbox2{$#1\sim$}%
  \dimen@=\ht0 %
  \advance\dimen@ by -\ht2 %
%----------------------------
% Compose the two symbols
%----------------------------
  \sbox0{%
    \lower1.9\dimen@\hbox{%
      $\m@th#1\relbar\isomorphism@joinrel\relbar$%
    }%
  }%
  \rlap{%
    \hbox to \wd0{%
      \hfill\raise\dimen@\hbox{$\m@th#1\sim$}\hfill
    }%
  }%
  \copy0 %
}
\newcommand*{\isomorphism@joinrel}[1]{%
  \mathrel{%
    \mkern-3.4mu %
    \mkern-1mu %
    \nonscript\mkern1mu %
    #1
  }%
}
\makeatother
\begin{document}
\[ A \isomorphism B^{C \isomorphism D^{E \isomorphism F}} \]
\end{document}

LuaTeX 修复

答案2

今天提交的 luatex 源代码修订版 6174 中已修复此问题。可能需要一段时间才能出现在 TeX 发行版中,在此之前可以使用其他答案中的解决方法。

答案3

显然 LuaTeX 0.95 中有一个错误,它不喜欢\nonscript那个地方的某个项目。

您可以通过反转项目的顺序来解决这个问题:

\newcommand*{\isomorphism@joinrel}{%
  \mathrel{%
    \mkern-3.4mu
    \nonscript\mkern1mu
    \mkern-1mu
  }%
}

\nonscript一种更通用、更安全的解决方法是在恰好位于数学列表(或子列表)末尾的项目后添加零数学字距,这似乎是触发该错误的唯一情况:

\nonscript\mkern<mudimen>\mkern0mu

或者

\nonscript\mskip<muskip>\mkern0mu

数学字距对数学原子的检测以及它们之间自动插入的空格没有影响。

相关内容