Biber와 저자의 "전체" 이름 중 이름 구성 요소의 특수한 형태 사이의 예상치 못한 상호 작용

Biber와 저자의 "전체" 이름 중 이름 구성 요소의 특수한 형태 사이의 예상치 못한 상호 작용

몇 년 전,질문author서지 항목 항목 에 경칭 "Sir"을 입력하는 방법에 대해 게시되었습니다 . (여담: 쿼리가 경칭 "Dame"의 사용과도 관련이 있다고 생각합니다. 두 번째 여담: 현장에서 경칭 "Sir"와 "Dame"을 제공하는 것은 좋은 생각이 아니라고 생각합니다 author. 그러나, 계속 진행하자.)

예를 들어 의 경우를 생각해 보세요 Sir Isaac Newton. 간단히 글을 쓴다면

author = "Sir Isaac Newton",

하나는 주어진 이름을 자르는 참고문헌 스타일을 사용하고 하나는 또는 로 끝 S. I. Newton납니다 Newton, S. I.. 안좋다! 관례에 따라 "Sir"와 "Dame"은 다음과 같습니다.절대축약됩니다. 당시 제가 제공한답변필드에 다음 "수정"을 적용합니다 author.

author = "{\relax Sir I}saac Newton",

이 수정 사항은 BibTeX에서 잘 작동합니다. 또한 biblatexBibTeX가 백엔드로 사용되거나 주어진 이름이 잘리는 경우 에도 작동합니다 (예: 옵션을 통해 giveninits=true). 그러나 최근 댓글에서 지적했듯이 (a)를 biber백엔드로 사용 하면 문제가 있습니다.그리고(b) 옵션이 giveninits=false설정됩니다. 즉, 주어진 이름이~ 아니다잘립니다. 간단한 2개 항목 MWE의 출력을 고려하십시오(코드는 아래에 자세히 게시되어 있으며 작성자 필드는 각각 author = "{\relax Sir I}saac Newton",및 입니다 author = "Zoe Zerlina Zwicky",.).

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

"Sir" 바로 앞의 공백에 유의하세요. MWE는 MacTeX2017, biblatex3.7 및 biber2.7로 컴파일되었습니다. FWIW, 다음은 에서 복사하여 붙여넣은 두 개의 given필드 입니다 .biber\jobname.bbl

given={{\relax\bibnamedelimb Sir\bibnamedelimb I}saac},
given={Zoe\bibnamedelima Zerlina},

과 사이에 가 biber삽입된 것을 확인하세요 . 이 매크로가 있으면 원하지 않는 공백 비트가 삽입됩니다.\bibnamedelimb\relaxSir

질문: 필드 의 첫 번째 인스턴스 \bibnamedelimb또는 전체 문자열을 제거하기 위해 설정할 수 있거나 설정해야 하는 옵션이 있습니까 ? 또는 이것이 버그입니까 (결국 수정될 예정임)?\relax\bibnamedelimbgivenbiber


\RequirePackage{filecontents}
\begin{filecontents*}{mybib.bib}
@misc{SIN, author = "{\relax Sir I}saac Newton", title = "Opticks", year = 1730, note = "Fourth edition"}
@misc{ZZZ, author = "Zoe Zerlina Zwicky", title = "Thoughts", year = 3001}
\end{filecontents*}

\documentclass{article}
\usepackage[giveninits=false,backend=biber]{biblatex}
\addbibresource{mybib.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

답변1

Biber를 사용하면 '확장 이름 형식'을 사용할 수 있습니다. 기본값이 마음에 들지 않으면 이름 부분의 축약된 형식을 명시적으로 지정할 수 있습니다.

당신은

author  = {family={Newton}, given={Sir Isaac}, given-i={Sir I}},

그리고 얻을 것이다

아이작 뉴턴 경

전액 또는

I. 뉴턴 경

축약된 형태로.

\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@misc{IsaacNewton,
  author  = {family={Newton}, given={Sir Isaac}, given-i={Sir I}},
  title   = {Opticks},
  year    = 1730,
  edition = {4},
}
@misc{xyz,
  author = {Zoe Zwicky},
  title  = {Thoughts},
  year   = 3001,
}
\end{filecontents*}

\documentclass{article}
\usepackage[giveninits=true,backend=biber]{biblatex}
\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

답변2

그의 아래 @moewe의 댓글에 의해 프롬프트됨훌륭한 답변-- 특히 biber소위 "중괄호 그룹"(추가 중괄호 쌍으로 묶인 모든 재료)의 자료를 처리하는 방법에 대한 암시를 통해 저는 또 다른 작업 솔루션을 생각해 냈습니다. @moewe가 제공한 것만큼 철저하지는 않지만 biber전체 이름의 주어진 이름 구성 요소가 무엇인지 파악하는 데 도움이 되는 추가 중괄호 그룹을 하나만 사용해야 한다는 점에서 매우 간단합니다 . 특히, 수행해야 할 작업은 교체하는 것입니다.

author = "{\relax Sir I}saac Newton", 

~와 함께

author = "{{\relax Sir I}saac} Newton", 

추가 중괄호 그룹이 있으면 "Sir"와 이니셜 "I" 사이 에 지시어를 biber삽입하지 않습니다 . 결과적으로 일반적인 단어 사이 공백이 삽입됩니다. 어떤 이유로든 와 실질적으로 다른 것으로 설정되면 이것이 새로운 문제를 일으킬 수 있다고 생각합니다 . 다행히도 여기서는 그렇지 않은 것 같습니다.\bibnamedelimb\relaxSir\bibnamedelimb\space

전체 MWE:

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

\RequirePackage{filecontents}
\begin{filecontents*}{mybib.bib}
@misc{SIN0, 
  author = "{\relax Sir I}saac Newton", 
  title  = "Opticks", note = "Not correct"
}
@misc{SIN1,
  author = {family={Newton}, given={Sir Isaac}, given-i={Sir I}},
  title  = {Opticks}, note = "Correct"
}
@misc{SIN2, 
  author = "{{\relax Sir I}saac} Newton", 
  title  = "Opticks", note = "Also correct"
}
\end{filecontents*}

\documentclass{article}
\usepackage[giveninits=false,backend=biber]{biblatex}
\addbibresource{mybib.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

관련 정보