我有一个文档,其中有一个右对齐的两行标题。所述标题是使用创建的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
插入了(以确保行距均匀),这导致(或者更确切地说是相应的引擎)无法看到行尾。有两种可能的解决方法:\strut
microtype
通过插入支柱,也可以在第一行禁用突起:
\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
,它应该可以简化这个过程,但我实际上无法让它工作——即使文档中的示例似乎也没有像广告中说的那样工作。]