amsmath가 로드된 경우 참고문헌의 얇은 공간이 작동하지 않음(biblatex + IEEE 스타일)

amsmath가 로드된 경우 참고문헌의 얇은 공간이 작동하지 않음(biblatex + IEEE 스타일)

와 연관되다GitHub plk / biblatex 문제 #910.


\documentclass{article}

\usepackage{amsmath}

\usepackage[style=ieee]{biblatex}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
    @Article{A,
        title = {A\,b c},
    }
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
    Text~\cite{A}.
    \printbibliography
\end{document}

여기에 이미지 설명을 입력하세요

잘못된 출력 외에도 MiKTeX를 사용한 컴파일은 오류로 끝납니다: Missing number, treated as zero. \end, Illegal unit of measure (pt inserted). \end.

\,위의 예와 같은 문서의 서지 제목에 얇은 공백( )을 사용하려면 어떻게 해야 하는지 알려주실 수 있나요 ?

답변1

biblate-ieee\MakeSentenceCase*일부(전부는 아님) 항목 유형의 제목에 적용됩니다 . @article제목 문장을 대소문자로 구분하지만 @book그렇지 않습니다. 이는 주석의 관찰 내용을 설명합니다.

\MakeSentenceCaseLaTeX에서는 문자열 조작이 다소 까다롭기 때문에 매우 복잡하고 깨지기 쉬운 매크로입니다. 특히 \MakeSentenceCase상당히 많은 확장을 수행하고 한 번에 한 문자씩 문자열을 반복하려고 시도합니다.

표준 LaTeX는 \,강력한 매크로로 정의 amsmath되지만

\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}

이는 \,확장될 수 있지만(한 번) 견고하지 않음(확장이 견고함)을 의미합니다. 이 확장으로 인해 기계에 일부 문제가 발생 \MakeSentenceCase하고 표시되는 오류가 발생합니다.

이 문제를 해결하는 방법에는 여러 가지가 있습니다.

  1. \,다시 튼튼하게 만드세요 . 문제

    \renewrobustcmd{\,}{\tmspace+\thinmuskip{.1667em}}
    

    로드한 후 amsmath. ( MWE에서 에 의해 로드되는 \renewrobustcmdneed 가 있으므로 이 줄은 및 를 모두 로드한 후에 와야 합니다 .)etoolboxbiblatexamsmathbiblatex

  2. \protect\,안에.bib (에서 제안한대로미코 댓글에서)

    @article{A,
      title = {A\protect\,b c},
    }
    
  3. 여전히 보호되는 다른 명령을 사용하십시오(에서 제안한 대로).데이비드 퍼튼 댓글에서), 예를 들어 biblatex\,같습니다 \addnbthinspace.

    @article{A,
      title = {A\addnbthinspace b c},
    }
    
  4. \MakeSentenceCase중괄호를 사용하면 언제든지 문자열의 일부를 '숨길' 수 있습니다 .

    @article{A,
      title = {A{\,}b c},
    }
    

    효과가 있지만 추천할 수 있을지 잘 모르겠습니다.


다음은 biblatex-ieee.

\documentclass{article}

\usepackage{amsmath}
\usepackage[style=numeric]{biblatex}

\DeclareFieldFormat{titlecase}{\MakeSentenceCase*{#1}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{A,
  title = {A\,b c},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
  Text~\cite{A}.
  \printbibliography
\end{document}

관련 정보