我在设置\fontspec
和时遇到了一个奇怪的问题。如果我在一行中连续\XeTeXinterwordspaceshaping = 2
使用多个 in ,就会出现错误。所有带有注释的行(行上方或右侧)都会导致错误。请注意第一行末尾和第二行开头之前的空格之间的细微差别。令我惊讶的是,最后两行再次起作用,尽管它们与第 32 行和第 35 行完全相同。我想第 38 行一定以某种方式抑制了错误。\fontspec
% problem
\fontspec
如果我删除\XeTeXinterwordspaceshaping = 2
,它们都可以正常工作。但我需要它,以便我的缅甸语文本正确对齐。
尽管我可以使用这些可以满足我需求的解决方法,但我很好奇为什么会发生这个问题。
\documentclass[twoside, openright]{book}
\XeTeXlinebreaklocale "my_MM" %Myanmar line and character breaks
\XeTeXinterwordspaceshaping = 2
\usepackage{fontspec}
\usepackage[dvipsnames]{xcolor}
\usepackage{xspace}
\newcommand{\class}{\myCodePar{class}}
\newcommand{\turnLeft}{\myCodePar{turnLeft}}
\newcommand{\myCodePar}[1]{{\fontspec[Scale=1, Script=Latin]{Ubuntu Mono} #1}}
\definecolor{myParColor}{HTML}{4E4D4D}
\definecolor{myParColor1}{HTML}{4E4D4E}
\begin{document}
%\noindent\myCodePar{MeetKarel}\class\ \turnLeft % problem
%\noindent\myCodePar{MeetKarel} \class\ \turnLeft % problem
%\noindent\myCodePar{MeetKarel}~\class\ \turnLeft % problem
\noindent\myCodePar{MeetKarel }\class\ \turnLeft % okay
% problem (note: if i set different color to these two fontspec, it works)
%\noindent {\fontspec[Color=myParColor]{Ubuntu Mono} MeetKarel} {\fontspec[Color=myParColor]{Ubuntu Mono} class}
% problem (note: if i set different color to these two fontspec, it works)
%\noindent {\fontspec[Color=myParColor]{Ubuntu Mono} MeetKarel}~{\fontspec[Color=myParColor]{Ubuntu Mono} class}
% okay
\noindent {\fontspec[Color=myParColor]{Ubuntu Mono} MeetKarel}{\fontspec[Color=myParColor]{Ubuntu Mono} class}
% okay
\noindent {\fontspec[Color=myParColor]{Ubuntu Mono} MeetKarel }{\fontspec[Color=myParColor]{Ubuntu Mono} class}
% okay !Same as line 35, but it works here, not there
\noindent {\fontspec[Color=myParColor]{Ubuntu Mono} MeetKarel}~{\fontspec[Color=myParColor]{Ubuntu Mono} class}
% okay !Same as line 32, but it works here, not there
\noindent {\fontspec[Color=myParColor]{Ubuntu Mono} MeetKarel} {\fontspec[Color=myParColor]{Ubuntu Mono} class}
\end{document}
答案1
绝对不建议使用\fontspec
:您总是不断重新计算相同的设置。
而是定义一个字体命令。
\documentclass[twoside, openright]{book}
\XeTeXlinebreaklocale "my_MM" %Myanmar line and character breaks
\XeTeXinterwordspaceshaping = 2
\usepackage{fontspec}
\usepackage[dvipsnames]{xcolor}
\newfontfamily{\ubuntumono}{Fira Mono}[Script=Latin]% replace Fira with Ubuntu
\DeclareTextFontCommand{\textubuntumono}{\ubuntumono}
\newcommand{\class}{\myCodePar{class}}
\newcommand{\turnLeft}{\myCodePar{turnLeft}}
\NewDocumentCommand{\myCodePar}{om}{%
% #1 = optional color, #2 = text
\textubuntumono{\IfValueT{#1}{\addfontfeatures{Color=#1}}#2}%
}
\definecolor{myParColor}{HTML}{4E4D4D}
\definecolor{myParColor1}{rgb}{1,0,0}
\begin{document}
\noindent\myCodePar{MeetKarel}\class\ \turnLeft % problem
\noindent\myCodePar{MeetKarel} \class\ \turnLeft % problem
\noindent\myCodePar{MeetKarel}~\class\ \turnLeft % problem
\noindent\myCodePar{MeetKarel }\class\ \turnLeft % okay
\noindent \myCodePar[myParColor]{MeetKarel} \myCodePar[myParColor]{class}
\noindent \myCodePar[myParColor1]{MeetKarel} \myCodePar[myParColor]{class}
\end{document}
我的系统上没有 Ubuntu Mono,所以我用 Fira Mono 替换了它,但这基本无关紧要。
无论如何,您的代码出现分段错误的事实应该进行调查。