\DeclareSourcemap을 사용하여 비어 있지 않은 필드에 값을 매핑하는 방법

\DeclareSourcemap을 사용하여 비어 있지 않은 필드에 값을 매핑하는 방법

내 출판 목록의 경우 출판 상태에 따라 자동으로 구별되는 여러 참고문헌을 생성하고 싶습니다. 출판 상태의 경우 해당 pubstate필드를 사용하고 해당 keywords= {own}필드를 내 참고문헌 데이터베이스에 내 출판물로 표시했습니다(놀랍죠?). 참고문헌은 옵션에 따라 내 출판물로 제한됩니다 keyword = own.

의 필터 기능은 해당 필드에 속하지 않는 biblatex일부 특정 필드에서만 작동하므로 명령을 통해 필드 내용을 필드에 pubstate매핑하고 싶습니다 . 거기에서 해당 분야에 따라 참고문헌을 필터링할 수 있었습니다. 아쉽게도 옵션을 사용하든 안하든 비어있지 않은 필드에는 아무 것도 쓰여지지 않은 것처럼 보입니다. 대신 빈 필드에 매핑하려고 하면(다음 줄로 시작하는 줄에 주석을 달고 아래 줄의 주석 처리를 제거함) 나중에 해당 필드에 원하는 값이 포함됩니다.pubstatekeywords\DeclareSourcemapappend\DeclareSourcemapfieldset=keywords

\begin{filecontents}{\jobname.bib}
@article{inpress,
    author = {A. Uthor},
    title = {Yay, they accepted my article},
    keywords = {own},
    pubstate = {inpress},
    year = {2014},
    journal = {Journal of Universal Acceptance}
}

@article{submitted,
    author = {A. Uthor},
    title = {Look, I've written a nice manuscript, would you publish it? Pleeease?},
    keywords = {own},
    pubstate = {submitted},
    year = {2014},
    journal = {Journal of Doubtful Acceptance}
}
\end{filecontents}

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

\addbibresource{\jobname.bib}

\DeclareSourcemap{
    \maps[datatype=bibtex]{
        \map{
            \step[fieldsource=pubstate, match={inpress},
                fieldset=keywords, fieldvalue={inpress}, append]
%               fieldset=note, fieldvalue={inpress}, append]
        }
    }
}

\listfiles

\begin{document}
\nocite{*}
\printbibliography[keyword=inpress, title = {Articles in press}]
\printbibliography[keyword=own, title = {Submitted articles}]
\end{document}

물론 다른 방법으로 이 작업을 수동으로 수행할 수도 있지만 왜 예상한 대로 작동하지 않는지 알고 싶습니다.

답변1

문제는 overwrite지도에서 지정해야 한다는 것입니다. 이 시도:

\DeclareSourcemap{
    \maps[datatype=bibtex]{
        \map[overwrite]{
            \step[fieldsource=pubstate, match={inpress},
                fieldset=keywords, fieldvalue={inpress}, append]
%               fieldset=note, fieldvalue={inpress}, append]
        }
    }
}

그러나 comma위의 코드는 owninpress.

아래 코드가 유용할 수도 있습니다. 필드 pubstate의 모든 내용을 추가합니다 keywords.

\DeclareSourcemap{
    \maps[datatype=bibtex]{
        \map[overwrite]{
            \step[fieldsource=pubstate,final]
            \step[fieldset=keywords, fieldvalue={,}, append]
            \step[fieldset=keywords, origfieldval, append]
        }
    }
}

위 코드는 키워드: own, inpress및 를 사용합니다 own, submitted.

답변2

이것은 질문에 대한 해결책이 아니라 문제에 대한 해결책입니다. biblatex 필드 inpress에 키워드를 추가하는 대신 keyword새 bibcheck를 정의하고 check옵션을 사용할 수 있습니다 \printbibliography.

\defbibcheck{inpress}{
  \iffieldequalstr{pubstate}{inpress}{}{\skipentry}
}  

그런 다음

\printbibliography[check=inpress]

관련 정보