
다음 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.ldf
2021/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
모든 매크로에 사용하는 것이 별로 즐겁지 않은 이유입니다.
\ensuremath
Enrico Gregorio가 지적한 또 다른 "모호한 유용성" 문제는 and 와 함께 사용하는 것입니다 \xspace
. 실제로 이는 \C(및 숫자 집합에 대한 다른 명령)를 텍스트에서 직접 사용하는 데 매우 일반적입니다.
앙투안 미시어
답변3
새 릴리스가 CTAN에 업로드되었으며 며칠 내에 출시될 예정입니다. 이 버그 보고서를 보내주셔서 감사합니다.