有没有办法将 \XeTeXinterwordspaceshaping=2 的效果限制在页面内的段落内?

有没有办法将 \XeTeXinterwordspaceshaping=2 的效果限制在页面内的段落内?

我正在用缅甸语排版。设置 \XeTeXinterwordspaceshaping=2 可以让我在段落完全对齐时实现所需的换行。我尝试了几种方法,只有这个选项最适合我。

问题是我还想使用 minted 包进行代码突出显示,而上述选项会干扰 minted 语法突出显示。据此提到,设置 \XeTeXinterwordspaceshaping=2 会产生副作用:

https://tug.org/pipermail/xetex/2016-February/026474.html

如果是这样的话,我想知道我是否可以将选项限制为仅文本段落并退出 minted 环境。这可能吗?这是我的 MWE(很抱歉 minted 需要安装 Python 和 pygmentize):

%!TeX program = XeLaTex
%!TEX encoding = UTF-8 Unicode

\documentclass[10pt]{article}
\XeTeXlinebreaklocale "my_MM"  %Myanmar line and character breaks
\XeTeXinterwordspaceshaping=2 %%% PLEASE EXPERIMENT  BY SETTING WITH DIFFERENT VALUES


\usepackage{fontspec}
\setmainfont{Padauk}

\usepackage{minted}
\begin{document}

သီပေါမင်း (ခရစ်နှစ် ၁၈၇၈-၁၈၈၅) သည် ကုန်းဘောင်မင်းဆက်၏ နောက်ဆုံးမင်းဖြစ်သည်။ သိရီပဝရ ဝိဇယာနန္တ ယသတိလောကာ ဓိပတိ ပဏ္ဍိတ မဟာဓမ္မရာဇာဓိရာဇာ ဖြစ်ပြီး နန်းသက် ခုနစ်နှစ်ဖြစ်သည်။
ကမ္ဘာ့ အကောင်းဆုံး

\XeTeXinterwordspaceshaping=0 %%% PLEASE EXPERIMENT  BY SETTING WITH DIFFERENT VALUES
\begin{minted}{kotlin}
fun main() {
    val name = "stranger1"        // Declare your first variable
    println("Hi, $name!")        // ...and use it!
    print("Current count:")
    for (i in 0..10) {           // Loop over a range from 0 to 10
        print(" $i")
    }
}
\end{minted}
\XeTeXinterwordspaceshaping=2 %%% PLEASE EXPERIMENT  BY SETTING WITH DIFFERENT VALUES
သီပေါမင်း (ခရစ်နှစ် ၁၈၇၈-၁၈၈၅) သည် ကုန်းဘောင်မင်းဆက်၏ နောက်ဆုံးမင်းဖြစ်သည်။ သိရီပဝရ ဝိဇယာနန္တ ယသတိလောကာ ဓိပတိ ပဏ္ဍိတ မဟာဓမ္မရာဇာဓိရာဇာ ဖြစ်ပြီး နန်းသက် ခုနစ်နှစ်ဖြစ်သည်။
ကမ္ဘာ့ အကောင်းဆုံး
\end{document}

设置 0,我得到了这个输出(有问题的渲染被圈出来了):在此处输入图片描述

设置 2,我得到了这个输出(绿色表示正确渲染,红色表示对铸造的意外副作用)在此处输入图片描述

答案1

在您链接到的电子邮件线程的其他地方,设置 2 的行为描述如下:

这些情况通过 来解决\XeTeXinterwordspaceshaping=2。使用此值,不仅可以在上下文中测量单词间空间,而且单个字体中的每一行文本(单词和中间空间)都将作为一个单元进行重新整形\shipout。这允许完全整形(上下文花饰、连字等)在单词间空间中生效。

引用\shipout意味着它按页面起作用并且不能针对单个段落进行更改。

但是我思考这是您想要的输出(我无法读取脚本,因此如果搞砸了,请发表评论,我稍后会再试)在此处输入图片描述

您链接到的电子邮件提供了一个线索,可用作\kern0pt避免不良影响的解决方法,因此我在每个\special位置都插入了一个字距minted

\documentclass[10pt]{article}
\XeTeXlinebreaklocale "my_MM"  %Myanmar line and character breaks
\XeTeXinterwordspaceshaping=2 %%% PLEASE EXPERIMENT  BY SETTING WITH DIFFERENT VALUES


\usepackage{fontspec}
\setmainfont{Padauk}
\showoutput
\usepackage{minted}
\begin{document}

သီပေါမင်း (ခရစ်နှစ် ၁၈၇၈-၁၈၈၅) သည် ကုန်းဘောင်မင်းဆက်၏ နောက်ဆုံးမင်းဖြစ်သည်။ သိရီပဝရ ဝိဇယာနန္တ ယသတိလောကာ ဓိပတိ ပဏ္ဍိတ မဟာဓမ္မရာဇာဓိရာဇာ ဖြစ်ပြီး နန်းသက် ခုနစ်နှစ်ဖြစ်သည်။
ကမ္ဘာ့ အကောင်းဆုံး

{
\let\xspecial\special
\def\special{\kern0pt\xspecial}


\begin{minted}{kotlin}
fun main() {
    val name = "stranger1"        // Declare your first variable
    println("Hi, $name!")        // ...and use it!
    print("Current count:")
    for (i in 0..10) {           // Loop over a range from 0 to 10
        print(" $i")
    }
}
\end{minted}

}% end special hack


သီပေါမင်း (ခရစ်နှစ် ၁၈၇၈-၁၈၈၅) သည် ကုန်းဘောင်မင်းဆက်၏ နောက်ဆုံးမင်းဖြစ်သည်။ သိရီပဝရ ဝိဇယာနန္တ ယသတိလောကာ ဓိပတိ ပဏ္ဍိတ မဟာဓမ္မရာဇာဓိရာဇာ ဖြစ်ပြီး နန်းသက် ခုနစ်နှစ်ဖြစ်သည်။
ကမ္ဘာ့ အကောင်းဆုံး
\end{document}

相关内容