デビ丸といいます。もともとは日本語TeXだったのですが、最小なサンプルにして行く
うちに日本語とは無関係らしいことが分ったのでこちらで良いか心配ですが。
環境は Debian Gnu Linux/testing です。詳しいバージョンなど必要でしたら
ご指摘ください。
下のファイルを lualatex で処理するとエラーなく PDF が生成されました。
試しに uplatex/platex で処理してみようと思ったら
! Limit controls must follow a math operator.
とエラーになりました。言われてみれば真っ当なエラーに思え、むしろ lualatex
でエラーにならないのが素人には怪しく思えました。latex/pdflatex でも同じ
エラーになるようです。
% コメントアウトしてる \DeclareMathOperator* を設定すれば全ての LaTeX
% で問題ないようで、その意味では解決してはいますが。
問題ありそうなファイルが LuaLaTeX では何故エラーにならないのか、またそれは
それで LuaLaTeX の問題ではないのかなどについてご教示いただければ幸いです。
\ifdefined\kanjiskip
\ifdefined\ucs
%! uplatex + dvipdfmx
\documentclass[12pt]{ujarticle}
\else
%! platex + dvipdfmx
\documentclass[12pt]{jarticle}
\fi
\else
\ifdefined\directlua
%! lualatex
\documentclass[12pt]{ltjsarticle}
\usepackage{luatexja-fontspec}
\setmainjfont[BoldFont=IPAexGothic]{IPAexMincho}
\setsansjfont{IPAexGothic}
\else
%! latex/pdflatex
\documentclass[12pt]{article}
\fi
\fi
\usepackage{amsmath}
%\DeclareMathOperator*{\Tord}{T}
\newcommand{\Tord}{\text{T}}
\begin{document}
\Huge
$\sideset{}{_{\leftarrow}}\Tord$
\end{document}
> 下のファイルを lualatex で処理するとエラーなく PDF が生成されました。
%! lualatex
\documentclass[12pt]{ltjsarticle}
\usepackage{luatexja-fontspec}
\setmainjfont[BoldFont=IPAexGothic]{IPAexMincho}
\setsansjfont{IPAexGothic}
とある通り,このソースだと LuaTeX-ja パッケージを使っています.
本来なら,Lua(La)TeX 本体の問題なのか,LuaTeX-ja の問題なのか
ここから更に切り分ける必要があります.
……さて,以下のソースでも同様の症状を起こすようです.
(こちらの環境は TeX Live 2014, x86_64-linuxです)
%! tex/ptex/pdftex/ ...
$A\limits$\end
tex, pdftex, ptex, uptex, eptex, euptex, xetex ではみな
! Limit controls must follow a math operator.
が発生しましたが,
luatex (rev 5024) ではエラーは発生しませんでした.
%! lualatex
\documentclass[12pt]{ltjsarticle}
\usepackage{luatexja-fontspec}
\setmainjfont[BoldFont=IPAexGothic]{IPAexMincho}
\setsansjfont{IPAexGothic}
とある通り,このソースだと LuaTeX-ja パッケージを使っています.
本来なら,Lua(La)TeX 本体の問題なのか,LuaTeX-ja の問題なのか
ここから更に切り分ける必要があります.
……さて,以下のソースでも同様の症状を起こすようです.
(こちらの環境は TeX Live 2014, x86_64-linuxです)
%! tex/ptex/pdftex/ ...
$A\limits$\end
tex, pdftex, ptex, uptex, eptex, euptex, xetex ではみな
! Limit controls must follow a math operator.
が発生しましたが,
luatex (rev 5024) ではエラーは発生しませんでした.
> $A\limits$\end
ですが,\showlists を 2 箇所につけて
\tracingonline1\showboxdepth1000\showboxbreadth1000
$A\showlists
\limits\showlists$\end
としてみると,1回目の \showlists では
### math mode entered at line 2
\mathord
.\fam1 A
なのに対し,2回目 では
### math mode entered at line 2
\mathop\limits
.\fam1 A
となっており,「A」が普通の文字 (\mathord) から
演算子 (\mathop) に変わっています.
----
LuaTeX のソース tex/texmath.w を見ると
void math_limit_switch(void)
{
const char *hlp[] = {
"I'm ignoring this misplaced \\limits or \\nolimits command.",
NULL
};
if (head != tail) {
if (type(tail) == simple_noad) {
subtype(tail) = (quarterword) cur_chr;
return;
}
}
tex_error("Limit controls must follow a math operator", hlp);
}
となっています.試していませんが,これでは条件が緩すぎで,
type(tail) 以外にも,
「subtype(tail) が op_noad_type_normal, op_noad_type_limits,
op_noad_type_no_limits のいずれかである」
という制約が必要ではないか,と思います.
ですが,\showlists を 2 箇所につけて
\tracingonline1\showboxdepth1000\showboxbreadth1000
$A\showlists
\limits\showlists$\end
としてみると,1回目の \showlists では
### math mode entered at line 2
\mathord
.\fam1 A
なのに対し,2回目 では
### math mode entered at line 2
\mathop\limits
.\fam1 A
となっており,「A」が普通の文字 (\mathord) から
演算子 (\mathop) に変わっています.
----
LuaTeX のソース tex/texmath.w を見ると
void math_limit_switch(void)
{
const char *hlp[] = {
"I'm ignoring this misplaced \\limits or \\nolimits command.",
NULL
};
if (head != tail) {
if (type(tail) == simple_noad) {
subtype(tail) = (quarterword) cur_chr;
return;
}
}
tex_error("Limit controls must follow a math operator", hlp);
}
となっています.試していませんが,これでは条件が緩すぎで,
type(tail) 以外にも,
「subtype(tail) が op_noad_type_normal, op_noad_type_limits,
op_noad_type_no_limits のいずれかである」
という制約が必要ではないか,と思います.