如何使用字母间距进行对齐?

如何使用字母间距进行对齐?

我有一个很长的梵文复合词,几乎占了一行,但在右边空白处留了一小段空白,太小了,放不下下一个单词的第一个音节,因此破坏了对齐。参见脚注 1 中的示例。灵感来自这个问题我对这个soul包做了一些实验,结果几乎令人满意,见脚注 2,但单词的最后一个字母消失了。

梅威瑟:

\documentclass{memoir}
\usepackage{soul}
\usepackage{calc}
\usepackage{fontspec}

\setlength{\footmarkwidth}{\leftmargin}
\setlength{\footmarksep}{0em}
\footmarkstyle{#1\hfill}

\sodef\spaceout{}{0em plus 1fil}{0em plus 1fil}{0em plus 1fil}
\begin{document}
\footnote{aśeṣavācyavācakātmakajagadabhedacamatkārātmakaśabdarāśivimarśaparamārthā sar\-vamantrāraṇis tatra tatrāgameṣu nirdiśyate | sā caiṣā viśvāvamarśanena paraṃ jñānaṃ prayacchati.}
\footnote{\makebox[\textwidth-\footmarkwidth][l]{\spaceout{aśeṣavācyavācakātmakajagadabhedacamatkārātmakaśabdarāśivimarśaparamārthā}} sar\-vamantrāraṇis tatra tatrāgameṣu nirdiśyate | sā caiṣā viśvāvamarśanena paraṃ jñānaṃ prayacchati.}
\end{document}

两个脚注

编辑:这个问题似乎相关。添加三行

\makeatletter
\sbox0{\ttfamily\global\let\SOUL@tt\ttfamily} 
\makeatother

为避免soul选择的字体不包含必要的变音组合,我更接近解决方案, 被ā保留,但我得到了! Package soul Error: Reconstruction failed.和以下包含小黑框的输出:尝试改变字体。显然,soul 试图将长单词连字符化(它不应该这样做)并且没有这样做。

答案1

我无法解释为什么soul您的文本会阻塞,但既然您正在使用fontspec,也许您也在使用进行编译luatex,在这种情况下您可以使用chickenize,这似乎可以解决问题。

请按以下方式使用:

\documentclass{memoir}
\usepackage{fontspec,chickenize}
\begin{document}
\letterspaceadjust% letterspace globally to improve greyness
blah blah blah
\end{document}

或者这样:

\documentclass{memoir}
\usepackage{fontspec,chickenize}
\begin{document}
blah blah blah

\textletterspaceadjust{Letterspace this sentence to improve its greyness.}
\end{document}

编辑:

这是使用 的第三种方法chickenize。正如 muk.li 评论的那样,第二种方法在注释开头引入了一个不必要的空格;至于第一种,它的全局范围可能不受欢迎。但 \letterspaceadjust在要影响的文本之前和\unletterspaceadjust之后使用 似乎可以避免这两个问题:

\documentclass{memoir}
\usepackage{chickenize,fontspec}

\setlength{\footmarkwidth}{\leftmargin}
\setlength{\footmarksep}{0em}
\footmarkstyle{#1\hfill}

\begin{document}
\letterspaceadjust
\footnote{aśeṣavācyavācakātmakajagadabhedacamatkārātmakaśabdarāśivimarśaparamārthā sar\-vamantrāraṇis tatra tatrāgameṣu nirdiśyate | sā caiṣā viśvāvamarśanena paraṃ jñānaṃ prayacchati.}

\unletterspaceadjust
\footnote{aśeṣavācyavācakātmakajagadabhedacamatkārātmakaśabdarāśivimarśaparamārthā sar\-vamantrāraṇis tatra tatrāgameṣu nirdiśyate | sā caiṣā viśvāvamarśanena paraṃ jñānaṃ prayacchati.}
\end{document}

MWE 的输出

答案2

soul我现在找到了一种不用(不再维护,并且不特别适合使用 unicode(?))的方法来解决这个问题。我只需要适应对上述问题的回答。它特别适用于这种情况,因为相关行仅包含一个单词,因此没有单词间空格,否则会产生问题。请参考以下工作示例:

\documentclass{memoir}
\usepackage{calc}
\usepackage{fontspec}

\setlength{\footmarkwidth}{\leftmargin}
\setlength{\footmarksep}{0em}
\footmarkstyle{#1\hfill}

\makeatletter
\def\spreadeven#1{%
\@tfor\next:=#1\do{%
  \next\hfill
 }%
}
\makeatother

\begin{document}

\footnote{aśeṣavācyavācakātmakajagadabhedacamatkārātmakaśabdarāśivimarśaparamārthā sar\-vamantrāraṇis tatra tatrāgameṣu nirdiśyate | sā caiṣā viśvāvamarśanena paraṃ jñānaṃ prayacchati.}
\footnote{\makebox[\textwidth-\footmarkwidth][l]{\spreadeven{aśeṣavācyavācakātmakajagadabhedacamatkārātmakaśabdarāśivimarśaparamārthā}} sar\-vamantrāraṇis tatra tatrāgameṣu nirdiśyate | sā caiṣā viśvāvamarśanena paraṃ jñānaṃ prayacchati.}
\end{document}

\makebox我想这个解决方案已经足够好了。从理论上讲,将命令合并到宏中也不错\spreadeven,但事实上,框的长度可能不同,这让事情变得很困难。

相关内容