
次のMWEは定義を示している
\mm@macro{C}{\ensuremath{\mathset{C}}\xspace}
[2023/02/24 v2.5]の267行目よりmismath.sty
—
\mm@macro{C}{\ensuremath{\mathset{C}}\xspace}
babel
— [2023/02/13 3.86]オプションrussian
[ russianb.ldf
2021/01/10 1.3m; russian 2020/09/09 1.3k]と組み合わせてロードするとエラーが発生します。
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage[T2A,T1]{fontenc}
\usepackage{substitutefont}
\usepackage[russian,english]{babel}
\substitutefont{T2A}{\rmdefault}{Tempora-TLF}
\usepackage{mismath}
\begin{document}
$1+2=3$
\end{document}
問題のある行の目的は、最終的には黒板に太字の C を付けることをmismath.sty
定義することです。\C
エラーは次のとおりです:
/usr/local/texlive/2022/texmf-dist/tex/latex/mismath/mismath.sty:267: LaTeX Err
or: There's no line here to end.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.267 ...macro{C}{\ensuremath{\mathset{C}}\xspace}
mismath
これは、 およびの以前のバージョンでは発生しなかった新しいエラーですbabel
。
\mismath
問題のある行をコメントアウトしたコピーを作成する以外に、修正方法はありますか?
答え1
要約
にバグがありますmismath.sty
。 のコードには\mm@macro
のはず\\mm@warning{#1}
です\mm@warning{#1}
。
基本的にマクロのコレクションであるパッケージでは、最終的に他のパッケージと衝突してしまうという一般的な問題があります。
特定のケースでは、 によるチェックは\mm@macro
、ドキュメントの開始時に遅延される必要があります。キリル文字のエンコーディングがロードされると、\C
は によって定義されますhyperref
。 についても同様です。がほとんどの処理をドキュメントの開始時に行うため、\mm@operator
がなくてもhyperref
問題が発生する可能性があります。unicode-math
コード
\newcommand\mm@macro[2]{
\@ifundefined{#1}{
\expandafter\def\csname #1\endcsname{#2}
}{\\mm@warning{#1}}
}
\newcommand\mm@operator[3][]{%
\ifthenelse{\equal{#1}{}}{\def\tempa{#3}}{\def\tempa{#1}}
\@ifundefined{\tempa}{
\DeclareMathOperator{#2}{#3}
}{\mm@warning{\tempa}}
}
すべきである
\newcommand\mm@macro[2]{%
\AtBeginDocument{%
\@ifundefined{#1}{%
\expandafter\def\csname #1\endcsname{#2}%
}{\mm@warning{#1}}%
}%
}
\NewDocumentCommand\mm@operator{O{#3}mm}{%
\AtBeginDocument{%
\@ifundefined{#1}{%
\DeclareMathOperator{#2}{#3}%
}{\mm@warning{#1}}%
}%
}
\\mm@warning
(のコード内の誤りに注意してください\mm@macro
)、これが実際に発生するエラーの原因です。
とにかく、
\mm@macro{C}{\ensuremath{\mathset{C}}\xspace}
有用性は疑わしい。数学を明確に分離する代わりにテキストを\xspace
入力できるようにするためだけに使用しても、何のメリットもありません。\C
$\C$
答え2
投稿してくれた Murray と回答してくれた egreg に感謝します。バグを修正した新しいリリースがすぐにアップロードされます。\mm@warning
代わりに、ロシア語で babel を使用する場合の簡単な解決策 (その場合は\\mm@warning
定義しない) が追加されます。\C
最初の即時の解決策は、mismath をロードした直後に使用することです。これが、すべてのマクロに\let\C\relax
使用することにあまり積極的ではない理由です。\AtBeginDocument
\ensuremath
Enrico Gregorio が指摘した「有用性が疑わしい」もう 1 つの問題は、およびの使用です\xspace
。これは、\C (および数値セットの他のコマンド) をテキスト内で直接使用するためのもので、非常に一般的です。
アントワーヌ・ミシエ
答え3
新しいリリースは CTAN にアップロードされており、数日以内に利用可能になるはずです。このバグレポートに感謝します。