I was using soul to underline text.
It works until I tried to underline some CJK text.
When I have
\def \mytest {测试test very long text blah blah blah ...}
\ul\mytest
in the document, it complains:
Package soul Error: Reconstruction failed.
I also tried \CJKunderline. But it does not auto-wrap for this long text.

soulas well asulemhave restrictions in what their underlining macros can accept as input. It may well be that neither can accept CJK characters without exploding. You already know about Paul Isambert's LuaLaTeX underlining code that should work here (again I didn't test), but of course requires LuaLaTeX (https://tex.stackexchange.com/q/435962/35864). – moewe Nov 27 '18 at 07:21