扩展字母间距字距调整算法不适用于法语重音符号

扩展字母间距字距调整算法不适用于法语重音符号

考虑一下代码

\documentclass{book}

\usepackage{xcolor}
\usepackage{scalerel}
\usepackage{scalefnt}


% Spaceout Algorithm

\def\theLetterSpace{0.5pt}
\def\theWordSpace{1.5\LocalLetterSpace}
\newlength\LocalLetterSpace
\newcommand\spaceout[2][\theLetterSpace]{%
  \setlength\LocalLetterSpace{#1}\expandafter\spaceouthelpA#2 \relax\relax}
\def\spaceouthelpA#1 #2\relax{%
  \spaceouthelpB#1\relax\relax%
  \ifx\relax#2\else\ \kern\theWordSpace\spaceouthelpA#2\relax\fi
}
\def\spaceouthelpB#1#2\relax{%
  #1%
  \ifx\relax#2\else
    \kern\LocalLetterSpace\spaceouthelpB#2\relax%
  \fi
}


% Overlay Title

\newcommand{\mytitle}[1]% #1 = title
{\bgroup
  \Huge
  \sbox0{\parbox{\columnwidth}{\centering\textbf{\color{black}#1}}}%
  \sbox1{\parbox{\columnwidth}{\centering\textbf{\color{red!75!black}#1}}}%
  \usebox0\llap{\raisebox{1.37pt}{\usebox1}}
\egroup}


\begin{document}
\thispagestyle{empty}

\begin{center}
{\vstretch{2.25}{\mytitle{\textbf{\scalebox{0.8}{{NO ACCENTS (No Spaceout)}}}}}}
\vskip 15pt
{\vstretch{2.25}{\mytitle{\textbf{\scalebox{0.8}{\spaceout[3pt]{NO ACCENTS (w/ Spaceout)}}}}}}
\vskip 15pt
{\vstretch{1.85}{\mytitle{\textbf{\scalebox{0.8}{{Raison D'\^{E}tre (No Spaceout)}}}}}}
%{\vstretch{1.85}{\mytitle{\textbf{\scalebox{0.8}{\spaceout[3pt]{Raison D'\^{E}tre (w/ spaceout)}}}}}}
\end{center}
\end{document}

产生

在此处输入图片描述

到目前为止,该算法运行良好。

但是,当我取消注释该行%{\vstretch{1.85}{\mytitle{\textbf{\scalebox{0.8}{\spaceout[3pt]{Raison D'\^{E}tre (w/ spaceout)}}}}}}并运行代码时,出现错误。

看来,\spaceout当涉及到这样的重音时,我使用的算法就不起作用了。

\spaceout问题:谁能告诉我当标题涉及法语重音时我该如何应用该命令?

谢谢。

答案1

抛开问题中所有不相关的东西,这归结为为什么你的循环不能起作用的问题Raison d'\^Etre

嗯,事实并非如此,因为在处理完撇号之后,下一个要检查的标记\^

\^\ifx\relax Etre...

显然,尝试一种口音\ifx并不是一个好主意。

简单的解决方案:使用microtype

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{microtype}

\begin{document}

Raison d'\^Etre

\textls{Raison d'\^Etre}

\textls[200]{Raison d'\^Etre}

\end{document}

在此处输入图片描述

现在您可以按照自己喜欢的方式进行着色、装箱和缩放。

如果您想要选择困难的方式,您需要扫描重音字母并用括号保护整个内容。警告:不允许使用 UTF-8 重音字母。

\documentclass{article}
\usepackage[T1]{fontenc}

\newcommand{\theLetterSpace}{0.5pt}
\newcommand{\theWordSpace}{1.5\LocalLetterSpace}
\newlength\LocalLetterSpace


\ExplSyntaxOn

\NewDocumentCommand{\spaceout}{O{\theLetterSpace}m}
 {
  \setlength{\LocalLetterSpace}{#1}
  \mlchristians_spaceout:n { #2 }
 }

\seq_new:N \l__mlchristians_spaceout_text_seq

\cs_new_protected:Nn \mlchristians_spaceout:n
 {
  \seq_set_split:Nnn \l__mlchristians_spaceout_text_seq { ~ } { #1 }
  \seq_map_inline:Nn \l__mlchristians_spaceout_text_seq
   {
    \__mlchristians_spaceout_word:n { ##1 }
    \hspace{\theWordSpace}
   }
  \unskip
 }

\cs_new_protected:Nn \__mlchristians_spaceout_word:n
 {
  \tl_set:Nn \l_tmpa_tl { #1 }
  \regex_replace_all:nnN { (\c{\^|\'|\`|\"}) ([^\{]) } { \{\1\2\} } \l_tmpa_tl
  \regex_replace_all:nnN { (\c{\^|\'|\`|\"}) (\{.\}) } { \{\1\2\} } \l_tmpa_tl
  \tl_map_inline:Nn \l_tmpa_tl { ##1 \kern \LocalLetterSpace } \unkern
 }

\ExplSyntaxOff

\begin{document}

Raison~d'\^Etre

\spaceout{Raison d'\^Etre}

\spaceout[5pt]{Raison d'\^{E}tre}

\end{document}

在此处输入图片描述

相关内容