启用微类型时右对齐行不匹配

启用微类型时右对齐行不匹配

我有一个文档,其中有一个右对齐的两行标题。所述标题是使用创建的scrlayer-scrpage。当我尝试启用该microtype包时,两行不在右侧对齐,第二行稍微向左移动。下面提供了一个最小的工作示例:

% !TeX TS-program = lualatex
\documentclass{scrartcl}
\usepackage{lua-visual-debug}

\usepackage{microtype}
\usepackage{scrlayer-scrpage}

% CONFIGURATION
\pagestyle{scrheadings}
\setkomafont{pagehead}{\normalfont} % reset \slshape

\ohead{
| Test ()\\
| Test ()%
}

\begin{document}
  \begin{flushright}
    | Test ()\\
    | Test ()%
  \end{flushright}
\end{document}

据我所知,这种情况发生在 PDFLaTeX、XeLaTeX 和 LuaLaTeX 中。删除更改头部字体的行并不能消除此问题,尽管它不太明显。软件包lua-visual-debug有助于更好地可视化框。

奇怪的是,错误没有出现在主体中。目前,我可以恢复到不使用 microtype 包的状态,但如果这是我这边的错误,我希望修复它,如果这是内部错误,microtype或者scrlayer-scrpage我想报告错误以帮助他们修复它。

页眉中的行未对齐

答案1

您没有犯任何错误,但这也不是 bug。错位是由于在标题末尾scrlayer-scrpage插入了(以确保行距均匀),这导致(或者更确切地说是相应的引擎)无法看到行尾。有两种可能的解决方法:\strutmicrotype

  • 通过插入支柱,也可以在第一行禁用突起:

    \ohead{%
    | Test ()\strut\\
    | Test ()%
    }
    
  • 或者通过图元\rightmarginkern(三种引擎均支持)重建突起:

    \makeatletter
    \newdimen\right@margin
    \newcommand*\protruderight[1]{%
      \vbox{\everypar{}%
        \setbox\@tempboxa\vbox{\noindent#1}%
        \unvbox\@tempboxa \setbox\@tempboxa=\lastbox
        \global\right@margin=\rightmarginkern\@tempboxa
      }%
      #1\kern\right@margin
    }
    \makeatother
    
    \ohead{%
    | Test ()\\
    | Test (\protruderight{)}%
    }
    

[luatex提供了原始的\protrusionboundary,它应该可以简化这个过程,但我实际上无法让它工作——即使文档中的示例似乎也没有像广告中说的那样工作。]

相关内容