当字体大小从默认字体大小更改时,microtype 的扩展似乎被禁用。这里有两段代码,第一段扩展可以工作,第二段则不行(好像 microtype 从未被赋予过拉伸和收缩选项)。
作品:
% main.tex
\documentclass[9pt]{extarticle}
\usepackage[english]{babel}
\usepackage{color}
\usepackage{blindtext}
\usepackage{multicol}
\definecolor{textblack}{RGB}{26,25,25}
\usepackage{fontspec}
\usepackage[expansion=true,stretch=500,shrink=500]{microtype}
\setmainfont[Ligatures=TeX,Renderer=Basic]{Warnock Pro}
\sloppy
\begin{document}
\color{textblack}
\fontsize{9pt}{12pt}\selectfont
\begin{multicols}{3}
\blindtext[10]
\end{multicols}
\end{document}
命令:
>> lualatex main.tex
不起作用:
%main.tex
\documentclass[9pt]{extarticle}
\usepackage[english]{babel}
\usepackage{color}
\usepackage{blindtext}
\usepackage{multicol}
\definecolor{textblack}{RGB}{26,25,25}
\usepackage{fontspec}
\usepackage[expansion=true,stretch=500,shrink=500]{microtype}
\setmainfont[Ligatures=TeX,Renderer=Basic]{Warnock Pro}
\sloppy
\begin{document}
\color{textblack}
\fontsize{8.8pt}{12pt}\selectfont
\begin{multicols}{3}
\blindtext[10]
\end{multicols}
\end{document}
命令:
>> lualatex main.tex
输出: 请建议是否可以解决这个问题,以及如何解决这个问题,或者我的代码是否有问题。
谢谢,
阿曼
答案1
microtype 仅针对一组有限的字体大小设置字体扩展。如果您将字体大小添加到列表中,它就会起作用(重新定义 basictext 可能不是最好的方法):
\documentclass{article}
\usepackage[english]{babel}
\usepackage{color}
\usepackage{blindtext}
\usepackage{multicol}
\definecolor{textblack}{RGB}{26,25,25}
\usepackage{fontspec}
\usepackage[expansion=true,stretch=500,shrink=500]{microtype}
\DeclareMicrotypeSet*{basictext}
{ encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,EU1,EU2,TU},
family = {rm*,sf*},
series = {md*},
size = {normalsize,footnotesize,small,large,9.1} %added 9.1
}
\setmainfont[Ligatures=TeX]{Arial}
\begin{document}
\fontsize{9.1pt}{12pt}\selectfont
\begin{multicols}{3}
\blindtext[10]
\end{multicols}
\end{document}
您也可以通过使用默认值以外的其他设置来解除限制:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{color}
\usepackage{blindtext}
\usepackage{multicol}
\definecolor{textblack}{RGB}{26,25,25}
\usepackage{fontspec}
\usepackage[expansion=true,stretch=500,shrink=500]{microtype}
\UseMicrotypeSet[expansion]{alltext}
\setmainfont[Ligatures=TeX]{Arial}
\begin{document}
\fontsize{9.1pt}{12pt}\selectfont
\begin{multicols}{3}
\blindtext[10]
\end{multicols}
\end{document}
或者更简洁,通过expansion=alltext
在加载微类型时作为包选项传递:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{color}
\usepackage{blindtext}
\usepackage{multicol}
\definecolor{textblack}{RGB}{26,25,25}
\usepackage{fontspec}
\usepackage[expansion=alltext,stretch=500,shrink=500]{microtype}% expansion=all would also work as that set too does not have restrictions on size, and is the least restrictive of all predefined sets
\setmainfont[Ligatures=TeX]{Arial}
\begin{document}
\fontsize{9.1pt}{12pt}\selectfont
\begin{multicols}{3}
\blindtext[10]
\end{multicols}
\end{document}
答案2
坦白说,我完全不知道人们为什么要使用它microtype
。当然,它有一些不错的接口,比如textls
,但对于扩展,我可以用两行 Lua 和一个字体功能实现同样的事情。这也没有字体大小问题。
%main.tex
\documentclass[9pt]{extarticle}
\usepackage[english]{babel}
\usepackage{color}
\usepackage{blindtext}
\usepackage{multicol}
\definecolor{textblack}{RGB}{26,25,25}
\usepackage{fontspec}
\usepackage[expansion=false]{microtype}
\directlua{
fonts.expansions.setups.default.stretch = 500
fonts.expansions.setups.default.shrink = 500
}
\adjustspacing=2
\setmainfont[Ligatures=TeX,Renderer=Basic,RawFeature={expansion=default}]{Roboto}
\sloppy
\begin{document}
\color{textblack}
\fontsize{8.8pt}{12pt}\selectfont
\begin{multicols}{3}
\blindtext[10]
\end{multicols}
\end{document}
使用命令的解释:
\adjustspacing
:来自 luatex 手册:“当\adjustspacing
值为 2 时,hz 优化将应用于字形和字距。当值为 3 时,将仅处理字形。小于 2 的值将禁用此功能。”因此启用字体扩展\adjustspacing=2
,相当于(默认情况下)。microtype
expansion=true
\directlua{...stretch = 500, ...}
:lualatex 相当于microtype
的包选项stretch=500
。\usepackage[expansion=false]{microtype}
传递expansion=false
可确保您仍可使用 microtype 的其他功能,同时使用 lua 处理扩展。如果您未传递expansion=false
,lualatex 运行将失败并出现错误:“错误:(字体扩展):字体已使用不同的扩展步骤进行扩展”,并且不会生成任何 pdf。