使用 luatexja-fontspec 时内联列表前不需要的双倍宽度空格

使用 luatexja-fontspec 时内联列表前不需要的双倍宽度空格

我在文档中的内联列表位之前看到了一个额外的大空间(看起来像双倍宽度空间):

图像

梅威瑟:

\documentclass[]{article}

\usepackage{fontspec}
\usepackage{listings}

\usepackage{luatexja-fontspec}
\setmainjfont{WenQuanYi Zen Hei}

\begin{document}

foo \lstinline!bar! baz

\end{document}

如果没有 就不会发生这种情况luatexja-fontspec。我可以解决这个问题/修复它吗?

答案1

文件中有一个多余的空格lltjp-listings.sty

194 % hook!
195 \lst@AddToHook{Init}{
196   \luatexcatcodetable\CatcodeTableLTJlistings\ltj@@listing@jpcmd
197   \lccode`\~="FFFFF\lowercase{\def~{\ltj@lst@ProcessJALetter}}%"

(为方便起见添加了行号)应该是

% hook!
\lst@AddToHook{Init}{%<--------HERE!!!
  \luatexcatcodetable\CatcodeTableLTJlistings\ltj@@listing@jpcmd
  \lccode`\~="FFFFF\lowercase{\def~{\ltj@lst@ProcessJALetter}}%"
  \directlua{luatexbase.add_to_callback('process_input_buffer',

在软件包维护人员修复该错误之前,除了编辑文件(的本地副本)之外,没有什么可以做的luatexja

如果我添加缺失值%,我得到的输出是

在此处输入图片描述

我是怎么发现它的?

不是用魔法。;-)

luatexja-fontspec首先,我查看了请求时加载的包,lltjp-listings.sty似乎是虚假空间的最佳候选者。

所以我\tracingcommands=1在行前添加了

foo \lstinline!bar! baz

\tracingcommands=0以此来限制搜索范围,先不使用这个选项编译文件,luatexja-fontspec然后再使用它。

使用\tracingcommands=1,(Lua)TeX 在文件中写入一些诊断信息.log,特别是它写入

{blank space  }

每当它执行原始命令“发出一个空格”时,这可能会或可能不会产生效果,具体取决于当前模式。

有 4 条这样的命令没有使用这个命令执行,luatexja-fontspec有 5 条使用这个命令执行。其中 4 条与另一个日志文件中的命令相对应,另外一条命令很可能是罪魁祸首。它出现在执行

{\catcodetable }

于是我寻找\luatexcatcodetable(这是使用 LuaLaTeX 时与原语对应的名称\catcodetable),瞧!未受保护的行尾就在那里!一点运气总是有帮助的。

lltjp-listings.sty于是我复制了工作目录中的文件并添加了缺失的部分%。运行 LuaLaTeX,输出结果正确。太棒了!

相关内容