
질문
문서가 상호 참조 항목 자체를 인용하지 않고 해당 항목을 참조하는 항목만 인용하는 경우 문서에 대해 .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의 예제 파일을 사용하여 추가해야 할 것은 다음과 같습니다.\input
tmpfile.tex
\input{tmpfile}
바로 앞에 \printbibliography
; 아니면 대신 할 수도 있습니다:
\InputIfFileExists{tmpfile.tex}{\input{tmpfile}}{\relax}
그리고 마지막으로 로 끝나는 새 참고문헌 파일을 얻습니다. _biber.bib
이 경우에는 6개의 항목이 포함되어야 합니다.
마지막으로 주의할 점은 참고 문헌의 원래 모양으로 돌아가려면 행을 주석 처리 하고 , 및 다시 \Input...
일련의 과정을 실행 해야 할 수도 있다는 것입니다. 예를 들어 위의 cfr 파일에서 이 기술을 사용하면 참고문헌에 6개 항목이 모두 표시되지만 이는 원하지 않을 수 있습니다.latex
biber
latex