Mismath의 \C와 러시아어와 바벨 사이의 충돌

Mismath의 \C와 러시아어와 바벨 사이의 충돌

다음 MWE는 정의를 보여줍니다.

\mm@macro{C}{\ensuremath{\mathset{C}}\xspace}

mismath.sty[2023/02/24 v2.5] 의 267번째 줄에서 —

\mm@macro{C}{\ensuremath{\mathset{C}}\xspace}

babel옵션 russian[ russianb.ldf2021/01/10 1.3m; 러시아어 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

tl;dr

에 버그가 있습니다 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대신 버그가 수정된 새 릴리스가 곧 업로드될 예정 이며 \\mm@warning, 러시아어로 바벨을 사용할 때 간단한 해결책이 포함되어 있습니다. \C이 경우 정의하지 마세요!

첫 번째 즉각적인 해결책은 \let\C\relax잘못된 내용을 로드한 직후에 사용하는 것입니다. 이것이 제가 \AtBeginDocument모든 매크로에 사용하는 것이 별로 즐겁지 않은 이유입니다.

\ensuremathEnrico Gregorio가 지적한 또 다른 "모호한 유용성" 문제는 and 와 함께 사용하는 것입니다 \xspace. 실제로 이는 \C(및 숫자 집합에 대한 다른 명령)를 텍스트에서 직접 사용하는 데 매우 일반적입니다.

앙투안 미시어

답변3

새 릴리스가 CTAN에 업로드되었으며 며칠 내에 출시될 예정입니다. 이 버그 보고서를 보내주셔서 감사합니다.

관련 정보