miktex-2.9.6942-x64 和 lualatex/luatex 存在问题

miktex-2.9.6942-x64 和 lualatex/luatex 存在问题

我在 Windows 10 x64 中运行 MiKTeX 2.9。

在使用 basic-miktex-2.9.6942-x64.exe 进行全新基本安装(保留旧版本)后,我遇到了 lualatex 程序的问题。(修正侧边距 侧边距和精确左/右对齐

  1. 使用新的 2019 基本安装时,我收到一条错误消息

警告(节点过滤器):错误:[\directlua]:11:尝试对字段“xadvance”(零值)执行算术运算

并崩溃。

  1. 切换回之前的 2018 环境后,程序运行良好。

  2. 我发现,如果我仅将整个目录 C:\Program Files\MiKTeX 2.9\miktex 与旧目录(2018)交换,同时保留其他所有内容,该程序现在就可以运行。

在新安装中,exe 文件的日期为 2019 年 1 月 2 日;在旧安装中,exe 文件的日期为 2018 年 6 月 26 日和 2018 年 6 月 24 日

有什么帮助吗?

lualatex主要代码

% !TeX TS-program = lualatex


\documentclass[12pt]{article}

\RequirePackage{xcolor}

\usepackage{luacode}
\newcount\dropsidebearings
\input{drop_sidebearing.lua}

\newcommand{\hairlineiv}[1][green]{% 
  \leavevmode%
  \kern-0.1pt %
  \smash{\color{#1}\vrule height 5\baselineskip depth 5pt width 0.1pt}%
  \kern-0.1pt
}


\begin{document}  
\pagestyle{empty}  

\newcommand{\longtitles}{Long titles must be exactly aligned with the vertical green bar.}% the main title

\begin{minipage}{5in}
  \dropsidebearings=1  %turn on the effect
%   \longtitles

 \raggedleft\sffamily\fontsize{50}{60}\selectfont\bfseries \longtitles\hairlineiv
\end{minipage}

\end{document}

luatex 代码(文件:drop_sidebearing.lua)

\begin{luacode*}

  local function drop_sidebearing(head, groupcode)
    if tex.count['dropsidebearings'] == 0 then
      return true
    end
    for n in node.traverse_id(node.id'hlist', head) do
      local char = node.has_glyph(n.head)
      if char then
        local f = font.getfont(char.font)
        if f.shared then
          local off = f.shared.rawdata.descriptions[char.char].boundingbox[1]*f.size/1000
           char.xadvance = char.xadvance - off
          char.xoffset = char.xoffset - off
        end
      end
      for ch in node.traverse_id(node.id'glyph', n.head) do
        char = ch
      end
      if char then
        local f = font.getfont(char.font)
        if f.shared then
          local desc = f.shared.rawdata.descriptions[char.char]
         char.xadvance = char.xadvance - (desc.width-desc.boundingbox[3])*f.size/1000
        end
      end
      local new_list = node.hpack(n.head, n.width, 'exactly')
      new_list.head = nil
      n.glue_order = new_list.glue_order 
      n.glue_set = new_list.glue_set
      n.glue_sign = new_list.glue_sign 
      node.free(new_list)
    end
    return true
  end
  luatexbase.add_to_callback('post_linebreak_filter', drop_sidebearing, 'Drop sidebearings after linebreaking')
\end{luacode*}

相关内容