![使用 luatexja-fontspec 时内联列表前不需要的双倍宽度空格](https://linux22.com/image/303400/%E4%BD%BF%E7%94%A8%20luatexja-fontspec%20%E6%97%B6%E5%86%85%E8%81%94%E5%88%97%E8%A1%A8%E5%89%8D%E4%B8%8D%E9%9C%80%E8%A6%81%E7%9A%84%E5%8F%8C%E5%80%8D%E5%AE%BD%E5%BA%A6%E7%A9%BA%E6%A0%BC.png)
我在文档中的内联列表位之前看到了一个额外的大空间(看起来像双倍宽度空间):
梅威瑟:
\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,输出结果正确。太棒了!