使用 LuaLaTeX 自动调整字距

使用 LuaLaTeX 自动调整字距

有没有办法将右双引号直接排版在句号上方(如果引号以句号结尾)?不是排版在左侧(例如,.),也不是排版在右侧(例如,.),而是直接排版在上方。下图是一个例子,来自树、地图和定理作者:Jean-luc Doumont。

右双引号直接位于句号上方。

答案1

一种方法是在引号和句号之间添加一些负的“字距”:

\documentclass{article}
\begin{document}
Here is an unkerned quotation mark: ``\dots''.

Here is a kerned quotation mark: ``\dots''\kern-0.5em.
\end{document}

字距调整示例

TeX 命令\kern-0.5em会在引号和后面的句号之间插入一个负空格。您必须对确切的间距进行一些调整,但使用像-0.5em这样的度量值会随字体大小缩放,效果应该会很好。

使用 LuaLaTeX 自动调整字距

正如其他人所建议的,您可以使用宏来执行此操作,但如果您想自动执行此操作,您似乎需要将此字距调整信息包含在字体特定的字距调整表中。这可以通过LuaLaTeX如下:

首先创建一个文件:Palatino.fea

languagesystem DFLT dflt;
languagesystem latn dflt;
feature kern {
pos  \quotedblright \period -1000;
} kern;

现在使用以下命令加载字体信息fontspec

\documentclass{article}
\usepackage{fontspec}
\setmainfont[FeatureFile=Palatino.fea]{Palatino}

\begin{document}
Here is an automatically kerned quotation mark: ``\dots''.

Here is a manually kerned quotation mark: ``\dots''\kern-0.5em.
\end{document}

请注意,您现在需要编译它lualatex,并且您需要为您想要使用的每种字体添加自定义字距信息。

使用 LuaLaTeX 自动调整字距

答案2

我会将其设置为一个\rlap-ed 句点(或者,按照 LaTeX 的意义,\makebox[0pt][l]),包裹在一个宏中:

在此处输入图片描述

\documentclass{article}
\newcommand{\qperiod}{\rlap{.}}
\begin{document}
Some text: ``\dots''.

Some text: ``\dots''

Some text: ``\dots\qperiod''
\end{document}

宏包装允许在需要时进行全局修改。

答案3

这里我使用了一个堆栈。 是stacktype“L”(长)或“S”(短)(默认)。如果是“L”,则堆叠“距离”是从基线到基线。通过设置为0pt,它表示两个组件共享相同的基线(相反,短堆栈距离是“锚点”顶部和堆叠项目底部之间的垂直间隙)。stackalignment定义水平对齐(默认 c=center)。在这里,我将其设置为左对齐。

\documentclass{article}
\usepackage{stackengine}
\renewcommand\stacktype{L}
\renewcommand\stackalignment{l}
\begin{document}
by ``\dots\stackon[0pt]{.}{''}
\end{document}  

在此处输入图片描述

stackengine通过使用具有 8 个强制参数的通用宏,可以绕过所有参数设置,实现相同的结果:

by ``\dots\stackengine{0pt}{.}{''}{O}{l}{F}{F}{L}

八个强制参数是:

  • 堆垛距离
  • 锚点项目
  • 堆叠物品
  • O(上)或 U(下)堆栈
  • l(左)c(输入)或 r(右)水平对齐
  • T/F 代表“quietstack”(“T”表示已创建但未打印)
  • T/F 代表“useanchorwidth”(“T”表示锚点宽度决定了整体堆栈宽度)
  • S(短)或L(长)堆栈

相关内容