如何解决“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}
答案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
数学字距对数学原子的检测以及它们之间自动插入的空格没有影响。