考虑一下代码
\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}