질문

질문

질문

문서가 상호 참조 항목 자체를 인용하지 않고 해당 항목을 참조하는 항목만 인용하는 경우 문서에 대해 .bib에서 생성된 파일 에 상호 참조 항목이 포함되도록 하려면 어떻게 해야 합니까 ? biber명확하게 말하면, 상호 참조 항목이 참조 목록에 별도로 표시되는 것을 원하지 않지만, .bib인용한 항목에 대한 전체 데이터를 사용할 수 있도록 파일에 해당 항목이 필요합니다.

배경

참고문헌 항목의 일반 데이터베이스를 사용하는 다음 문서를 고려하십시오(여기에는 로 포함됨 orig.bib).

\documentclass{article}
\usepackage[backend=biber]{biblatex}
  \bibliography{orig}
\usepackage{filecontents}
\begin{filecontents}{orig.bib}
@bookinbook{author-bk1,
  crossref = {author-bigbk},
  title = {Originally a Separate Book},
  pages = {345--789}}

@suppbook{author-essays-intro,
  crossref = {author-essays},
  title = {Introduction},
  pages = {1--8}}

@incollection{author-essay,
  crossref = {editor-collection},
  title = {My Essay},
  pages = {8-34},
  author = {Author, Bit Busy}}

@book{author-bigbk,
  author = {Author, Prolific},
  title = {Collected Works},
  year = 1453,
  publisher = {Printers 'R Us},
  address = {Milky Way}}

@book{author-essays,
  title = {Essays},
  author = {Author, Busy},
  year = 1578,
  publisher = {We Print 4U},
  address = {Alpha Centauri}}

@book{editor-collection,
  editor = {Editor, Fair},
  booktitle = {Collection of People's Thoughts},
  year = 1679,
  publisher = {Great Collections in Print},
  address = {Earth}}
\end{filecontents}

\begin{document}

\autocites{author-bk1,author-essays-intro,author-essay}

\printbibliography

\end{document}

예상대로 다음이 생성됩니다.

전체 참고 목록

약속

.bib이제 이 특정 문서에 필요한 항목만 포함하는 파일을 생성한다고 가정해 보겠습니다 . (분명히 이 예제에서는 orig.bib다른 내용이 포함되어 있지 않으므로 의미가 없지만 물론 일반적으로 그런 것은 아닙니다.)

님의 매뉴얼을 살펴보면 biber다음과 같은 내용을 찾을 수 있습니다.

3.1.1 output_format 옵션

Biber는 BibTeX .bib 파일을 출력할 수 있습니다. .bib 출력은 특정 문서와 독립적으로 전체 데이터 소스 파일을 변환하는 경우 도구 모드에서 가능합니다(섹션 3.12 참조). 또한 .bbl 대신 문서에서 인용된 항목만 포함된 새 .bib 파일을 원할 때 유용합니다. 예를 들어 조판을 위해 최소한으로 완전한 패키지를 다른 사람에게 보낼 수 있습니다. 이렇게 하려면 첫 번째 LaTeX 실행 후 다음과 같이 Biber를 호출해야 합니다.

biber --output_format=bibtex test.bcf 

그러면 test.tex의 모든 인용 항목이 인용 순서대로 포함되고 다양한 ouput_* 옵션에 따라 형식이 지정된 test_biber.bib라는 새 .bib 파일이 생성됩니다.

그래서 나는 이것을 시도합니다 :

biber --output_format=bibtex prawf3.bcf

문제

내 시도는 다음을 생성합니다 prawf3_biber.bib.

@BOOKINBOOK{author-bk1,
  CROSSREF = {author-bigbk},
  PAGES    = {345--789},
  TITLE    = {Originally a Separate Book},
}

@SUPPBOOK{author-essays-intro,
  CROSSREF = {author-essays},
  PAGES    = {1--8},
  TITLE    = {Introduction},
}

@INCOLLECTION{author-essay,
  AUTHOR   = {Author, Bit Busy},
  CROSSREF = {editor-collection},
  PAGES    = {8-34},
  TITLE    = {My Essay},
}

.bib이 파일을 사용하면 분명히 필요한 결과를 얻을 수 없기 때문에 이는 분명히 당신이 바라는 것이 아닙니다 . 그건:

\documentclass{article}
\usepackage[backend=biber]{biblatex}
  \bibliography{prawf3_biber}

\begin{document}

\autocites{author-bk1,author-essays-intro,author-essay}

\printbibliography

\end{document}

biber실행 시 문제가 발생합니다 .

INFO - Found 3 citekeys in bib section 0
INFO - Processing section 0
INFO - Looking for bibtex format file 'prawf3_biber.bib' for section 0
INFO - Found BibTeX data source 'prawf3_biber.bib'
WARN - I didn't find a database entry for crossref 'author-bigbk' in entry 'author-bk1' - ignoring (section 0)
WARN - I didn't find a database entry for crossref 'author-essays' in entry 'author-essays-intro' - ignoring (section 0)
WARN - I didn't find a database entry for crossref 'editor-collection' in entry 'author-essay' - ignoring (section 0)

이는 상호 참조 항목이 없다는 점을 감안할 때 분명히 예상되는 것입니다.

biber의 매뉴얼에서는 tool모드에 있을 때 상호 참조 데이터를 사용하는 것에 대해 논의하지만 이는 전체 데이터 소스를 변환할 때만 적용되는 것 같습니다. 따라서 이를 에 적용하려면 orig.bib그렇게 한 다음 prawf3_biber.bib위 명령을 사용하여 (이제 완전한) 항목을 추출할 수 있습니다. [적어도 그럴 수 있다고 생각합니다. 테스트는 하지 않았습니다.]

다시 생각해 본 질문

.bib하지만 생성된 파일의 항목이 상호 참조 항목의 데이터로 완료되었는지 어떻게 확인할 수 있습니까?없이원본 .bib파일을 변환하고없이문서에서 상호 참조된 항목을 인용하고 있습니까?

답변1

마침내 이 작업을 수행하는 방법을 알아냈습니다. 문서에서는 --output_format내가 사용하는 방식으로 호출 tool모드를 사용하는 것이 다른 것처럼 보입니다. 따라서 데이터가 처리되는 방식은 crossref여기서 우려되는 사례와 관련이 없는 것 같습니다. 하지만,

biber --help

오히려 더 도움이 됩니다. 특히, 다음과 같이 명시하고 있습니다.--output_format=bibtex tool모드 에서만 의미가 있습니다. 따라서 해당 옵션은 문서에서 알 수 있듯이 분명히 이런 종류의 경우에 사용하기 위한 것이므로 tool여기서도 모드를 사용하는 것이 합리적입니다 . 게다가 명령 도움말은 비교적 간단한 용도로 이해하기가 훨씬 더 간단합니다. 모드 에 대한 문서는 tool다양한 데이터 소스 변환에 대한 올바른 처리 유형을 구성하는 방법에 대해 자세히 설명하는 반면, 명령 도움말은 기본 옵션을 더 명확하게 설명합니다.

특히 여기서 원하는 것을 수행할 수 있는 옵션이 있는 것으로 나타났습니다.

biber --output_format=bibtex --output_resolve prawf3.bcf

이것이 수행하는 작업은 결과에 상호 참조된 항목을 포함하지 않습니다 .bib. 대신에 하는 일은완벽한상호 참조된 항목의 데이터와 함께 이를 사용하는 항목입니다. 결과 prawf3_biber.bib:

@BOOKINBOOK{author-bk1,
  AUTHOR     = {Author, Prolific},
  BOOKAUTHOR = {Author, Prolific},
  BOOKTITLE  = {Collected Works},
  LOCATION   = {Milky Way},
  PAGES      = {345--789},
  PUBLISHER  = {Printers 'R Us},
  TITLE      = {Originally a Separate Book},
  YEAR       = {1453},
}

@SUPPBOOK{author-essays-intro,
  AUTHOR     = {Author, Busy},
  BOOKAUTHOR = {Author, Busy},
  BOOKTITLE  = {Essays},
  LOCATION   = {Alpha Centauri},
  PAGES      = {1--8},
  PUBLISHER  = {We Print 4U},
  TITLE      = {Introduction},
  YEAR       = {1578},
}

@INCOLLECTION{author-essay,
  AUTHOR    = {Author, Bit Busy},
  BOOKTITLE = {Collection of People's Thoughts},
  EDITOR    = {Editor, Fair},
  LOCATION  = {Earth},
  PAGES     = {8-34},
  PUBLISHER = {Great Collections in Print},
  TITLE     = {My Essay},
  YEAR      = {1679},
}

실제로 상호 참조 항목을 별도로 포함하는 것보다 여러 가지 목적으로 더 좋습니다.

답변2

가능하다면 명백한 이유로(특히 편의성) cfr의 답변이 선호됩니다.

그러나 Biber가 교차 참조된 항목을 '해결'하는 방법을 피하고 모든 항목을 별도로 유지해야 하는 경우 - 예를 들어 하나의 에세이 모음에서 여러 기사를 인용하고 따라서 각 에세이가 단지 책을 가리키도록 해야 하기 때문일 수 있습니다. 각각의 참고문헌에서 전체 참고문헌을 제공하는 대신 다음과 같이 할 수 있습니다.

latex      basefile.tex 
biber -m 1 basefile.bcf     # `--mincrossref | -m 1` produces a .bbl with all the references
bbl2nocite basefile tmpfile # see below
latex      basefile.tex
biber --output_format=bibtex basefile.bcf # produces `basefile_biber.bib`

이것이 작동하려면 어떻게든 \input추출할 내용이 필요합니다 .bbl. 나는 bbl2nocite본질적으로 단지 마무리하고 다음과 같은 grep무의미한 스크립트를 사용하여 이 작업을 수행했습니다 sed.

#!/bin/bash
#
# Find and convert all lines in a .bbl file from
# \entry{<key>}{<entrytype>}{}
# to
# \nocite{<key>}
#
# usage: bbl2nocite inputfile outputfile
INFILE=$1
OUTFILE=$2

grep '\\entry' $INFILE.bbl | sed 's/\\entry/\\nocite/g' | sed 's/}{.*/}/' > $OUTFILE.tex

당신이 만들어야 할 또 다른 수정 사항은 내가 위에서 호출한 내용이 .tex필요하다는 것입니다 . cfr의 예제 파일을 사용하여 추가해야 할 것은 다음과 같습니다.\inputtmpfile.tex

\input{tmpfile}

바로 앞에 \printbibliography; 아니면 대신 할 수도 있습니다:

\InputIfFileExists{tmpfile.tex}{\input{tmpfile}}{\relax}

그리고 마지막으로 로 끝나는 새 참고문헌 파일을 얻습니다. _biber.bib이 경우에는 6개의 항목이 포함되어야 합니다.

마지막으로 주의할 점은 참고 문헌의 원래 모양으로 돌아가려면 행을 주석 처리 하고 , 및 다시 \Input...일련의 과정을 실행 해야 할 수도 있다는 것입니다. 예를 들어 위의 cfr 파일에서 이 기술을 사용하면 참고문헌에 6개 항목이 모두 표시되지만 이는 원하지 않을 수 있습니다.latexbiberlatex

관련 정보