平均能量损失

平均能量损失

在我之前的 OP 中,题为“有什麼特別的呢。“,我们发现一个办法要使该问题的 MWE 编译,请通过更改

\begin{document}

进入

\begin{document} \catcode`\﹑=12 \catcode`\~=12

然而,当我尝试别人的代码时,我想到了一个新的平均能量损失(因此又有新的 OP)上面的解决方案不再有效。与此同时,我还发现罪魁祸首是\usepackage{luatexja-fontspec}

确实,平均能量损失下面是一个简洁的分隔符代码,它可以将文本分隔开\maincommand{...}并将命令应用于所包含文本的每个字符,同时将其他命令应用于标点符号本身(\punctdef)。这对我尝试过的无数标点符号都有效。有或无均可正在加载包裹\usepackage{luatexja-fontspec}

但有一个例外:看来不能同时拥有两者:

  • \usepackage{luatexja-fontspec}

以及下列一项或两项:

  • \punctdef~{~}
  • \punctdef﹑{﹑}

我的问题是:如何解决包luatexja-fontspec与发出的命令之间的不兼容性

请注意,可以取消\usepackage{luatexja-fontspec}注释平均能量损失下面查看问题。

改变

\begin{document}

进入

\begin{document} \catcode`\﹑=12 \catcode`\~=12

在这种情况下没有帮助。

平均能量损失

% !TEX TS-program = lualatexmk
\documentclass{scrreprt}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% For luatexja-fontspec
\usepackage{fontspec}
% \usepackage{luatexja-fontspec} % IF YOU UNCOMMENT \usepackage{luatexja-fontspec}, THIS CODE WILL FAIL, UNLESS YOU REPLACE ALL INSTANCES OF ~ AND ALL INSTANCES OF ﹑ BY SOME OTHER PUNCTUATION MARK
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Separator (\maincommand)
\def\chinchar#1{[#1]} % redefine it if you want...
\def\punctdef#1{\expandafter\def\csname p-#1\endcsname}

\def\maincommand#1{\maincommandA#1\relax}
\def\maincommandA#1{\ifx\relax#1\else
      \expandafter\ifx\csname p-#1\endcsname\relax \chinchar{#1}%
      \else \csname p-#1\endcsname\fi
   \expandafter\maincommandA\fi
}
%
\punctdef~{~\kern1em}
\punctdef﹑{﹑\kern1em}
\punctdef,{,\kern1em}
\punctdef:{:\kern1em}
\punctdef;{;\kern13pt}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document} \catcode`\﹑=12 \catcode`\~=12

\maincommand{AB~C,,,DE;FG:H}

\end{document}

答案1

~ 字符在\usepackage{luatexja-fontspec}使用时被设置为 catcode 11(字母)。因此被\punctdef~解释为一个控制序列,当然是未定义的控制序列。从错误报告中可以清楚地看出:

 ! Undefined control sequence.
l.23 \punctdef~

解决方案很简单。在这种情况下使用。此外,\punctdef{~}{...}之后的设置完全不相关。删除它。\punctdef~{...}\catcode\begin{document}

编辑我在这里添加了其他信息以便停止创建下一个和下一个新问题。

字符还有另一个问题。当您使用它时,它不会被打印。您可以在日志文件中看到以下消息:

Missing character: There is no ﹑ (U+FE51) in font IPAExMincho:jfm=ujis!

但是你可以\punctdef定义另一种方式来打印此类字符。例如:

\punctdef{﹑}{\leavevmode\lower1ex\hbox{\tt`}\kern1em}

相关内容