나른한 기준으로 정렬된 참고문헌 그룹화

나른한 기준으로 정렬된 참고문헌 그룹화

키워드별로 참고문헌을 그룹화할 수 있다는 것을 알고 있습니다. 그러나 이것은 사실이 아닙니다. 왜냐하면 알파벳순 정렬과 숫자 스타일을 사용하지 않으면 참고문헌을 키워드별로 나눌 수 있기 때문입니다. 그러나 정렬된 참고문헌과 숫자 번호 매기기를 원하고 이를 분할하려고 하면 번호 매기기를 중단할 것입니다. 나에게 필요한 것은 다른 언어 항목보다 먼저 특정 언어의 턱받이 항목을 갖는 것입니다. 예:

\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage[english,greek,russian]{babel} % English please
\setmainfont[
BoldFont={DeJavu Serif Bold},
ItalicFont={DeJavu Serif Italic},
BoldItalicFont={DeJavu Serif BoldItalic}
]{DeJavu Serif}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@Book{AlKarapan,
author = {Καραπαναγοπούλου, Αλέξανδρος Κ.},
title = {Η Μεγάλη Σύνοδος της Ορθοδόξου Ανατολικής Εκκλησίας},
publisher = {auto-édition},
date = {1990/1998},
volumes = {6},
address = {Αθήνα},
langid={greek},
}
@Inbook{CypinIstorijaRPC,
author = {Владислав Цыпин},
title = {История Русской Церкви 1917--1997},
chapter = {VIII},
publisher = {Издательство Спасо-Преображенского Валаамского монастыря},
address = {Москва},
date = {1997},
urldate = {2010-10-25},
url = {http://old.pravoslavie.by/podpod.asp?id=135&Session=10},
langid={russian},
}
@Inbook{authorrus,
    author = {Другой Автор},
    title = {Название},
    chapter = {VIII},
    publisher = {Издательство},
    address = {Москва},
    date = {1997},
    urldate = {2010-10-25},
    langid={russian},
}
@article{baez/article,
    author       = {Baez, John C. and Lauda, Aaron D.},
    title        = {Higher-Dimensional Algebra {V}: 2-Groups},
    journaltitle = {Theory and Applications of Categories},
    date         = 2004,
    volume       = 12,
    pages        = {423-491},
    version      = 3,
    eprint       = {math/0307200v3},
    eprinttype   = {arxiv},
    langid       = {english},
    langidopts   = {variant=american},
    annotation   = {An \texttt{article} with \texttt{eprint} and
        \texttt{eprinttype} fields. Note that the arXiv reference is
        transformed into a clickable link if \texttt{hyperref} support
        has been enabled.  Compare \texttt{baez\slash online}, which
        is the same item given as an \texttt{online} entry},
    hyphenation={english},
}
@article{another,
    author       = {Another,Author and One more, Author},
    title        = {Title},
    journaltitle = {Journal},
    date         = 2004,
    volume       = 12,
    pages        = {423-491},
    version      = 3,
    eprint       = {math/0307200v3},
    eprinttype   = {arxiv},
    langid       = {english},
    langidopts   = {variant=american},
    hyphenation={english},
}
\end{filecontents*}

\usepackage[russian,greek,english]{babel}
\usepackage[natbib=true,
style=numeric,
isbn=true,
url=true,
defernumbers=false,
sorting=nyt, 
firstinits=true,
backend=biber,
language=auto,  
autolang=other]{biblatex}

\addbibresource{\jobname.bib}

\begin{document}
\cite{AlKarapan,CypinIstorijaRPC,baez/article}
\nocite{*}
\printbibliography
\end{document}

출력은 다음과 같습니다. 항목은 그리스어와 러시아어가 아닌 영어로 표시됩니다. bbl 파일을 편집하면 처음에 러시아어 항목을 이동한 다음 그리스어 항목과 마지막 영어 항목을 이동하고비버를 실행하지 마세요항목을 인용하고 lualatex 또는 xelatex를 실행하면 모든 것이 괜찮을 것입니다.

Biblatex/Biber는 참고문헌을 정렬하고 bbl 파일에서 특정 언어에 대한 항목을 수동으로 이동합니다. 특정 언어와 내가 원하는 언어 순서에 따라 항목이 정렬됩니다.

질문: bbl 파일을 편집하지 않고 이런 종류의 주문을 할 수 있나요?

이게 내가 얻으려고 하는 거야 항목 이동 후 참고문헌

연속적인 넘버링이 필요하기 때문에 여러 개의 턱받이를 사용할 수 없습니다.

답변1

물론 \sort{\field{langid}}정렬 절차에 를 넣을 수도 있지만 이렇게 하면 언어가 사전순으로 정렬되므로 정확히 원하는 내용이 아닌 영어가 먼저 표시되고 그 다음 그리스어, 러시아어가 표시됩니다.

그런데 우연히 정렬을 해보면내림차순사전식으로 MWE에서 원하는 순서를 얻습니다.

\DeclareSortingScheme{lnyt}{
  \sort{
    \field{presort}
  }
  \sort[final]{
    \field{sortkey}
  }
  \sort[direction=descending]{\field{langid}}
  \sort{
    \field{sortname}
    \field{author}
    \field{editor}
    \field{translator}
    \field{sorttitle}
    \field{title}
  }
  \sort{
    \field{sortyear}
    \field{year}
  }
  \sort{
    \field{sorttitle}
    \field{title}
  }
  \sort{
    \field[padside=left,padwidth=4,padchar=0]{volume}
    \literal{0000}
  }
}

물론 이는 원하는 정렬 순서가 언어 이름의 사전순 역순과 일치하기 때문입니다.

지금 사용하세요 sorting=lnyt.


보다 사용자 정의가 가능하지만 약간 더 복잡한 솔루션은 presort필드와 Biber의 소스 매핑 기능을 사용합니다.

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=langid, match=\regexp{\Arussian\Z}, final]
      \step[fieldset=presort, fieldvalue=1]
    }
    \map{
      \step[fieldsource=langid, match=\regexp{\Agreek\Z}, final]
      \step[fieldset=presort, fieldvalue=2]
    }
    \map{
      \step[fieldsource=langid, match=\regexp{\Aenglish\Z}, final]
      \step[fieldset=presort, fieldvalue=3]
    }
  }
}

각 언어는 필드에 기록된 숫자에 간단히 매핑됩니다 presort. 해당 presort필드는 다른 정렬 필드보다 먼저 고려됩니다.

이는 사전 편찬 순서를 따르지 않는 정렬 순서를 허용합니다.

MWE

\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage[english,greek,russian]{babel} % English please
\setmainfont[
BoldFont={DeJavu Serif Bold},
ItalicFont={DeJavu Serif Italic},
BoldItalicFont={DeJavu Serif BoldItalic}
]{DeJavu Serif}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@Book{AlKarapan,
author = {Καραπαναγοπούλου, Αλέξανδρος Κ.},
title = {Η Μεγάλη Σύνοδος της Ορθοδόξου Ανατολικής Εκκλησίας},
publisher = {auto-édition},
date = {1990/1998},
volumes = {6},
address = {Αθήνα},
langid={greek},
}
@Inbook{CypinIstorijaRPC,
author = {Владислав Цыпин},
title = {История Русской Церкви 1917--1997},
chapter = {VIII},
publisher = {Издательство Спасо-Преображенского Валаамского монастыря},
address = {Москва},
date = {1997},
urldate = {2010-10-25},
url = {http://old.pravoslavie.by/podpod.asp?id=135&Session=10},
langid={russian},
}
@Inbook{authorrus,
    author = {Другой Автор},
    title = {Название},
    chapter = {VIII},
    publisher = {Издательство},
    address = {Москва},
    date = {1997},
    urldate = {2010-10-25},
    langid={russian},
}
@article{baez/article,
    author       = {Baez, John C. and Lauda, Aaron D.},
    title        = {Higher-Dimensional Algebra {V}: 2-Groups},
    journaltitle = {Theory and Applications of Categories},
    date         = 2004,
    volume       = 12,
    pages        = {423-491},
    version      = 3,
    eprint       = {math/0307200v3},
    eprinttype   = {arxiv},
    langid       = {english},
    langidopts   = {variant=american},
    annotation   = {An \texttt{article} with \texttt{eprint} and
        \texttt{eprinttype} fields. Note that the arXiv reference is
        transformed into a clickable link if \texttt{hyperref} support
        has been enabled.  Compare \texttt{baez\slash online}, which
        is the same item given as an \texttt{online} entry},
    hyphenation={english},
}
@article{another,
    author       = {Another,Author and One more, Author},
    title        = {Title},
    journaltitle = {Journal},
    date         = 2004,
    volume       = 12,
    pages        = {423-491},
    version      = 3,
    eprint       = {math/0307200v3},
    eprinttype   = {arxiv},
    langid       = {english},
    langidopts   = {variant=american},
    hyphenation={english},
}
\end{filecontents*}

\usepackage[russian,greek,english]{babel}
\usepackage[natbib=true,
style=numeric,
isbn=true,
url=true,
defernumbers=false,
sorting=nyt, 
firstinits=true,
backend=biber,
language=auto,  
autolang=other]{biblatex}

\addbibresource{\jobname.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=langid, match=\regexp{\Arussian\Z}, final]
      \step[fieldset=presort, fieldvalue=1]
    }
    \map{
      \step[fieldsource=langid, match=\regexp{\Agreek\Z}, final]
      \step[fieldset=presort, fieldvalue=2]
    }
    \map{
      \step[fieldsource=langid, match=\regexp{\Aenglish\Z}, final]
      \step[fieldset=presort, fieldvalue=3]
    }
  }
}

\begin{document}
\cite{AlKarapan,CypinIstorijaRPC,baez/article}
\nocite{*}
\printbibliography
\end{document}

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

답변2

다음은 moewe의 답변을 단순화한 버전입니다.


BibTeX 소스 파일

다음 BibTeX 파일은 ~/TestBib.bib.

@book{shakespeare,
   author = {William Shakespeare},
   title = {Hamlet},
   year = {1600},
   langid = {english}
}
@book{homer,
   author = {Homer},
   title = {Illiad \& Oddysey},
   year = {8th century BC},
   langid = {greek}
}
@book{tolstoy,
   author = {Leo Tolstoy},
   title = {War and Peace},
   year = {1869},
   langid = {russian}
}

참고문헌이 포함된 간단한 LaTeX 문서

\documentclass{article}
\usepackage{biblatex}
\addbibresource{TestBib.bib}
\begin{document}
\cite{shakespeare}\cite{homer}\cite{tolstoy}
\printbibliography
\end{document}

실행해 본 결과

> cd ~
> lualatex 테스트
> biber 테스트
> lualatex 테스트

~이다

변조되지 않은 출력


영어 먼저, 나머지는 기본 순서에 따름

\documentclass{article}
\usepackage{biblatex}
\DeclareSourcemap {
   \maps {
      \map {
         \step [
            fieldsource=langid,
            match=english,
            fieldset=presort,
            fieldvalue=a
         ]
      }
   }
}
\addbibresource{TestBib.bib}
\begin{document}
\cite{shakespeare}\cite{homer}\cite{tolstoy}
\printbibliography
\end{document}

영어 먼저


영어가 먼저, 러시아어가 두 번째

이제 영어 항목이 첫 번째 항목이고 러시아어 항목이 두 번째 항목이 되는 방식으로 서지 항목 순서를 지정하기 위해 소스 맵을 추가하겠습니다.

\documentclass{article}
\usepackage{biblatex}
\DeclareSourcemap {
   \maps {
      \map {
         \step [
            fieldsource=langid,
            match=english,
            fieldset=presort,
            fieldvalue=a
         ]
         \step [
            fieldsource=langid,
            match=russian,
            fieldset=presort,
            fieldvalue=b
         ]
      }
   }
}
\addbibresource{TestBib.bib}
\begin{document}
\cite{shakespeare}\cite{homer}\cite{tolstoy}
\printbibliography
\end{document}

출력은 다음과 같습니다

영어가 먼저, 러시아어가 두 번째


노트

  1. 옵션 의 기본값이기 때문에 (moewe의 답변에서와 같이) datatype=bibtex옵션을 전달할 필요가 없습니다 . 페이지를 참조하세요. 매뉴얼 199 , v. 3.18b, 2022년 7월 12일.\mapsbibtexdatatypebiblatex

  2. \regexp유효한 TEX 명령이기도 한 문자 시퀀스가 ​​포함되어 있지 않으면 정규 표현식을 (moewe의 답변에서와 같이) 래핑할 필요가 없습니다 . 페이지를 참조하세요. 매뉴얼 204번.

  3. 특수 필드 값의 데이터 유형은 숫자가 아닌 문자열로 presort해석됩니다 . biblatex(매뉴얼 31페이지를 참조하십시오.) 따라서 해당 값에 적용되는 순서는 숫자가 아닌 사전식입니다. 따라서 내 생각에는 직관적이지 않은 결과를 피하기 위해 (moewe의 답변에서와 같이) 이 필드에 숫자를 할당하지 않는 것이 가장 좋습니다. 예를 들어, "영어 먼저, 러시아어 두 번째" 예에서 영어 항목 presort에 값을 할당 2하고 러시아어 항목 presort에 값을 할당 한 경우 참고 10문헌에서 러시아어 항목이 영어 항목 앞에 표시됩니다.

  4. 명시적으로 지정하지 않는 한, 참고문헌 항목의 presort필드는 자동으로 로 설정됩니다 mm. (매뉴얼 83페이지 섹션 3.6 '정렬 옵션'의 두 번째 단락을 참조하십시오.) 따라서 정렬하려는 값이 정확하게 세 개 있는 경우 세 값 모두를 langid명시적으로 지정할 필요가 없습니다. presort그들 중 (moewe의 답변에서와 같이). 그 중 두 개의 명시적 값만 지정 하고 둘 다 사전순으로 . presort보다 작은지 확인하는 것으로 충분합니다.mm

    이는 또한 특정 항목을 참고문헌 상단에 표시하기를 원하는지 알 수 있는 유용한 정보이지만, 제가 "에서 수행한 것처럼 나머지 항목의 상대적 순서를 지정하는 데는 관심이 없습니다. 영어가 먼저이고 나머지는 기본 순서에 따릅니다." 예입니다.

    소스 매핑은 매뉴얼의 부록 C1-C3에 설명된 기본 내장 템플릿을 포함하여 정렬 템플릿이 적용되기 전에 발생합니다. (매뉴얼 199페이지 섹션 4.5.3 '데이터의 동적 수정'의 두 번째 단락을 참조하십시오.) 따라서 기본 정렬 템플릿을 사용하는 경우 nty사용하지 않는 경우 사용되는 기본 정렬 템플릿이 무엇인지 말하십시오. 정렬 템플릿을 명시적으로 지정하면(매뉴얼 48페이지 섹션 3.1.2.1 '패키지 옵션/프리앰블 옵션/일반' 참조) 각 presort그룹 내의 항목 순서는 예상대로, 즉 템플릿에 의해 금지됩니다.

  5. step신중하게 배열하면 s 및 s 의 수를 map크게 줄일 수 있으며 finals의 수도 줄이거나 제거할 수도 있습니다. moewe의 답변을 "영어 먼저, 러시아어 두 번째" 예와 비교해 보세요.

  6. finalConsult 의 의미에 관하여moewe의 답변, 매뉴얼이 불분명하고 심지어 오해의 소지가 있기 때문입니다.

관련 정보