增加小型大写字母单词之间的字距

增加小型大写字母单词之间的字距

激活小型大写字母的跟踪功能后,检测单词间空格可能会有点困难。参见下文。

\documentclass{article}
\usepackage{fontspec}
    \setmainfont{Libertine Serif}[
        SmallCapsFeatures = {Letters = SmallCaps, LetterSpace = 5}]
\begin{document}
The title of my article is \textsc{This is the moment your life changed forever}.
\end{document}

在此处输入图片描述

因此,我想增加小写字母之间的间距,但是仅有的当两侧的单词都采用小型大写字母时(即,在第一个用小型大写字母书写的单词之前或最后一个单词之后不应有多余的空格)。

我本来以为我可以通过添加到来做到这一点WordSpace = <>SmallCapsFeatures但这会改变所有地方的词间空间。

\documentclass{article}
\usepackage{fontspec}
    \setmainfont{Libertine Serif}[
        SmallCapsFeatures = {Letters = SmallCaps, LetterSpace = 5, WordSpace = 5}]
\begin{document}
The title of my article is \textsc{This is the moment your life changed forever}.
\end{document}

在此处输入图片描述

答案1

您想要设置\spaceskip为非空值(也可能是\xspaceskip)。

\documentclass{article}
\usepackage{fontspec}
\usepackage{xpatch}

\setmainfont{Linux Libertine O}[
  SmallCapsFeatures = {
    Letters = SmallCaps,
    LetterSpace = 20,
  }
]

\xapptocmd{\scshape}
  {\spaceskip=3\fontdimen2\font plus 3\fontdimen3\font minus \fontdimen4\font
   \xspaceskip=2\fontdimen7\font}
  {}{}


\begin{document}

The title of my article is \textsc{This is the moment your life changed forever}.
Here the space is normal.

\end{document}

在此处输入图片描述

这些值当然是夸张了:这里单词间距被设置为正常值的三倍。

\spaceskip具有非零值时,它将用于单词间空间,而不是默认字体定义的空间。相关的字体参数是

  1. \fontdimen2\font(单词间空间的自然宽度)
  2. \fontdimen3\font(拉伸分量)
  3. \fontdimen4\font(收缩组件)

因此,指定

\spaceskip=3\fontdimen2\font plus 3\fontdimen3\font minus \fontdimen4\font

我们告诉您使用三倍于正常单词间距的间距,可拉伸三倍于正常间距,并按与默认值相同的方式收缩。该参数\xspaceskip与间距因子相关:当间距因子 >2000 时,TeX 会将其值添加到正常单词间距中(这是句点后间距增加的方式);默认情况下,TeX 使用\fontdimen7\font,但如果非零,则使用\xspaceskip

答案2

这里,\theskip定义了里面新的单词间空间\textsc{}。已编辑以修复最后一个单词被截断的错误。我还展示了它在本 MWE 的标题中是否有效。

\documentclass{article}
\let\svtextsc\textsc
\def\theskip{\hspace{4ex}}
\def\textsc#1{\def\myskip{}\wspaceout#1 \relax\relax}
\def\wspaceout#1 #2\relax{%
  \myskip\svtextsc{#1}\let\myskip\theskip\ifx\relax#2\else\wspaceout#2\relax\fi}
% HEADER STUFF
\usepackage{fancyhdr}
\lhead[\rm\thepage]{\textsc{Word1 Word2 Word3}}
\rhead[xxx]{\rm\thepage}
\pagestyle{fancy}
\begin{document}
The title of my article is \textsc{This is the moment your life changed forever}. 
And some more text

\def\theskip{\hspace{1.5ex}}
The title of my article is \textsc{This is the moment your life changed forever}. 
And some more text

\def\theskip{\ }
The title of my article is \textsc{This is the moment your life changed forever}. 
And some more text

\def\theskip{\hspace{2ex}}
The title of my article is \textsc{This is the moment your life changed forever}. 
And some more text
\end{document}

在此处输入图片描述

答案3

我认为fontspec这里可以做得更好,允许WordSpace单独设置小写字母。以下是不是作为可用的文档代码——它重新定义了 fontspec 的内部命令,并且可能错过一些清理——但仅作为概念证明:

\documentclass{article}
\usepackage{fontspec}

\ExplSyntaxOn\makeatletter
\cs_set:Nn \__fontspec_declare_shapes_smcaps:nn
 {
    \tl_if_empty:NF \l__fontspec_nfss_sc_tl
     {
      \__fontspec_DeclareFontShape:xxxxxx {\l__fontspec_nfss_enc_tl} {\l_fontspec_family_tl} {#1}
        { \__fontspec_combo_sc_shape:n {#2} } {\l__fontspec_nfss_sc_tl} {\l__fontspec_postadjust_tl
         \l__uf_fontspec_postadjust_sc_tl
        }
     }
  }

 \tl_set:Nn \l__uf_fontspec_postadjust_sc_tl
     {
      \fontdimen 2 \font = 5 \fontdimen 2 \font
      \fontdimen 3 \font = 5 \fontdimen 3 \font
      \fontdimen 4 \font = 5 \fontdimen 4 \font
     }

\ExplSyntaxOff      

 \setmainfont{Linux Libertine O}[
        SmallCapsFeatures = {Letters = SmallCaps, LetterSpace = 5,}
           ]

\ExplSyntaxOn
%should not affect Arial:
 \tl_clear:N \l__uf_fontspec_postadjust_sc_tl
\ExplSyntaxOff 
 \setsansfont{Arial}    
\begin{document}
The title of my article is

\textsc{This is the moment your life changed forever}.

{\large \scshape Large: the title of my article} 

\textsc{\bfseries the title of my article}

the title of my article 

\sffamily some words in sans 

\scshape some words in small caps sans

\end{document}

在此处输入图片描述

答案4

\caps您的问题应该通过使用命令形式包来解决soul。例如:

\documentclass{article}
\usepackage{soul}
\begin{document}
   \scshape{abcde fghijk lmnopqr stuvwxyz abcdefghij klmnopqr stuvwxyz}

   \caps{abcde fghijk lmnopqr stuvwxyz abcdefghij klmnopqr stuvwxyz}
\end{document}

您可以使用命令更改字体、间距甚至正在使用的命令\capsdef

用法:

\capsdef{<font>}{<command>}{<inter-letter space>}{<inner space>}{<outer space>}

看起来您想增加<inner-space>。可以按如下方式进行:

\capsdef{T1/ppl/m/n/5-15}{\scshape}{.16em}{.6em}{.2em}

这也将命令设置为,\scshape因此您不需要使用\caps

相关内容