我想减少单词间距一些书面文本中的段落,其余文本保持不变。所以我尝试\addfontfeature
在本地使用,我使用以下命令执行\tight{bla}
现在的问题是 之后的所有内容\addfontfeature
都会受到它的影响。即使我添加第二个\addfontfeature
(由 执行\nottight{bla}
)来反转效果,我也会得到相同的结果。
我究竟做错了什么?
梅威瑟:
% !TEX TS-program = LuaLaTeX
\documentclass{scrartcl}
\usepackage{fontspec}
\setmainfont{Arial Unicode MS}
\newfontfamily\arabicfont[Script=Arabic,Numbers=Arabic]{Arial Unicode MS}
\newcommand{\arabtext}[1] % Arabic inside LTR
{\bgroup\luatextextdir TRT\arabicfont{#1}\hfill\egroup}
\newcommand{\tight}[1]
{\bgroup\addfontfeature{WordSpace=-2.0}#1\egroup}
\newcommand{\nottight}[1]
{\bgroup\addfontfeature{WordSpace=1.0}#1\egroup}
\begin{document}
% normal text:
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.
% tight text:
\tight{Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.}
% should be normal text:
\nottight%
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.}
% normal Arabic text:
\arabtext{وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}
% tight Arabic text:
\arabtext{\tight{وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}}
% should be normal Arabic text:
\arabtext{\nottight%
وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}
\end{document}
答案1
您应该使用 而不是 WordSpace,\spaceskip
因为它尊重分组。问题是WordSpace=...
设置\fontdimen
参数并且这些分配是全局的(但只影响当前字体)。
\documentclass{scrartcl}
\usepackage{fontspec}
\setmainfont{Arial Unicode MS}
\newfontfamily\arabicfont[Script=Arabic,Numbers=Arabic]{Arial Unicode MS}
\newcommand{\arabtext}[1] % Arabic inside LTR
{\bgroup\luatextextdir TRT\arabicfont{#1}\hfill\egroup}
\newcommand{\tight}[1]
{\bgroup\spaceskip=0.2pt plus 0.2pt minus 0.1pt\relax#1\egroup}
\begin{document}
% normal text:
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.
% tight text:
\tight{Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.}
% should be normal text:
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.
% normal Arabic text:
\arabtext{وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}
% tight Arabic text:
\arabtext{\tight{وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}}
% should be normal Arabic text:
\arabtext{%
وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}
\end{document}
看这个答案了解详情\spaceskip
答案2
还有另一种方法可以做到这一点:只需为间距较小的文本声明一个新的字体系列。出于某种原因,简单版本适用于拉丁文字,但无法适用于阿拉伯文字。我不知道为什么。为了解决阿拉伯文字问题,我使用了此处描述的技巧: \addfontfeature 的范围。
\nottight
使用此解决方案,您根本不需要命令。对于阿拉伯语文本,我[tight]
在命令中添加了一个可选参数;对于非阿拉伯语文本,我刚刚创建了一个常规\tight
宏。
我使用了较大的间距参数值,以便效果更清晰(当然这会使‘紧密’的语义有些不稳定......)。
% !TEX TS-program = LuaLaTeX
\documentclass{scrartcl}
\usepackage{fontspec}
\setmainfont[BoldFont={Arial Bold}]{Arial Unicode MS}
\newfontfamily\arabicfont[Script=Arabic,Numbers=Arabic]{Arial Unicode MS}
\newfontfamily\tightarabicfont[Script=Arabic,Numbers=Arabic,WordSpace=4,Scale=.999]{Arial Unicode MS}
\newfontfamily\tightfont[WordSpace=4]{Arial Unicode MS}
\newcommand{\arabtext}[2][]% Arabic inside LTR
{\bgroup\luatextextdir TRT{\csname #1arabicfont\endcsname #2\hfill}\egroup}
\DeclareTextFontCommand{\tight}{\tightfont}
\begin{document}
\textbf{Some normal text}
% normal text:
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.
\textbf{Some ‘tight’ (in fact expanded to show the effect) text}
% tight text:
\tight{Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.}
\textbf{And back to normal}
% should be normal text:
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.
\textbf{Now some normal Arabic text}
% normal Arabic text:
\arabtext{وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}
\textbf{Some ‘tight’ (expanded to show the effect) Arabic text}
% tight Arabic text:
{
\arabtext[tight]{وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}
}
\textbf{Some normal Arabic text}
% normal Arabic text:
\arabtext{وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}
\end{document}
答案3
我认为最好将 do 和 undo 包装\addfontfeature
在同一个命令中。问题在于弄清楚您需要撤消什么。如果您设置WordSpace
为-2.0
,则可以通过随后将其“设置”为 来实现反转-0.5
(我的基本数学技能建议:-2 * -0.5 = 1
...)。当然,真实值不是整数,但您明白了。
请注意,由于该命令旨在“乘以”设置,因此\nottight
当它直接跟随命令时,该命令才会“起作用”(使用这些设置)。\tight
\tight
(另外:我没有你的字体,所以我切换了它们。)
% !TEX TS-program = LuaLaTeX
\documentclass{scrartcl}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}%{Scheherazade}%{Arial Unicode MS}
\newfontfamily\arabicfont[Script=Arabic,Numbers=Arabic]{Amiri}
\newcommand{\arabtext}[1] % Arabic inside LTR
{\bgroup\luatextextdir TRT\arabicfont{#1}\hfill\egroup}
\newcommand{\tight}[1]
{%
{\bgroup\addfontfeature{WordSpace=-2}%
#1\egroup}
\addfontfeature{WordSpace={-0.5}}
}
\newcommand{\nottight}[1]% will fail ... except when it directly follows a "-2" change
{\bgroup\addfontfeature{WordSpace={-0.5}}%
#1\egroup}
\begin{document}
% normal text:
\the\fontdimen2\font\quad
\the\fontdimen3\font\quad
\the\fontdimen4\font\par
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.
% tight text:
\tight{%
\the\fontdimen2\font\quad
\the\fontdimen3\font\quad
\the\fontdimen4\font\par
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat
interpretaris no. Vis id summo periculis, ut duo falli recteque. Id
sea gubergren splendide repudiandae. Quo tota quaeque
conclusionemque.}
% normal text again:
\the\fontdimen2\font\quad
\the\fontdimen3\font\quad
\the\fontdimen4\font\par
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat
interpretaris no. Vis id summo periculis, ut duo falli recteque. Id
sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.
% tight in normal text
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat
interpretaris \tight{TIGHT: no.%
\footnote{\the\fontdimen2\font\quad \the\fontdimen3\font\quad
\the\fontdimen4\font.\quad \leftarrow\quad ``footnotesize''\ldots} %
Vis id summo periculis, ut} NOT TIGHT: duo falli recteque. Id sea gubergren
splendide repudiandae. Quo tota quaeque conclusionemque.
% won't be normal text:
\nottight{%
\the\fontdimen2\font\quad
\the\fontdimen3\font\quad
\the\fontdimen4\font\par
Lorem ipsum dolor sit amet, vel ei ipsum animal. Sea intellegat interpretaris no. Vis id summo periculis, ut duo falli recteque. Id sea gubergren splendide repudiandae. Quo tota quaeque conclusionemque.}
% normal Arabic text:
\arabtext{%
\the\fontdimen2\font\quad
\the\fontdimen3\font\quad
\the\fontdimen4\font\par
وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}
% tight Arabic text:
\arabtext{\tight{%
\the\fontdimen2\font\quad
\the\fontdimen3\font\quad
\the\fontdimen4\font\par
وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}}
% should be normal Arabic text:
\arabtext{\nottight{%
\the\fontdimen2\font\quad
\the\fontdimen3\font\quad
\the\fontdimen4\font\par
وفي تشكيل الأمور ما, عُقر حادثة أصقاع عدم تم, دون واحدة فهرست بـ. أن بوابة ا الوزراء كلا. و إختار بمحاولة فقد, ذات أمّا مواقعها ان. إنطلاق المؤلّفة اليابان، تم.}}
\end{document}
不过,不管怎样,我认为您可能希望选择一个比 更好的值-2
。WordSpace
可以改变单词间距、单词拉伸和单词收缩(分别为\fontdimen
2、3 和 4)。另一个想法是\spacefactor
直接捏造。