我有一个很长的梵文复合词,几乎占了一行,但在右边空白处留了一小段空白,太小了,放不下下一个单词的第一个音节,因此破坏了对齐。参见脚注 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}
答案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
,但事实上,框的长度可能不同,这让事情变得很困难。