Biber 및 \printbiblist{shorttitle}: 필터 및 단축된 서지 설명 문제

Biber 및 \printbiblist{shorttitle}: 필터 및 단축된 서지 설명 문제

내 질문은 이 토론과 관련이 있습니다. 참고문헌의 약어를 속기 목록으로 가져오는 방법은 무엇입니까?

다음 코드를 고려하십시오.

\documentclass{article}
\usepackage{fontspec}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents}{\jobname.bib}
@ARTICLE{test1,
    AUTHOR = {John Smith},
    TITLE = {A Tremendously Interesting Opinion},
    SHORTTITLE = {TIP},
    JOURNALTITLE = {Journal of Tremendously Interesting Opinions},
    SHORTJOURNAL = {JTIO},
    VOLUME = {1},
    NUMBER = {1},
    YEAR = {1950},
    KEYWORDS = {important},
}
@ARTICLE{test2,
    AUTHOR = {John Tumble},
    TITLE = {A Tremendously Interesting Idea},
    SHORTTITLE = {ABITLONGERSHORTTITLE},
    JOURNALTITLE = {Journal of Tremendously Interesting Ideas},
    VOLUME = {1},
    NUMBER = {1},
    YEAR = {1960},
}
@BOOK{book1,
    AUTHOR = {Peter Johnson},
    TITLE = {A Tremendously Interesting Title of Book One},
    SHORTTITLE = {ATIT},
    TRANSLATOR = {John Smith},
    ORIGLANGUAGE = {german},
    VOLUME = {1},
    LOCATION = {London},
    PUBLISHER = {Publisher},
    YEAR = {1950},
    KEYWORDS = {important},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}

%\printbiblist[title={Abbreviations}]{shorttitle}
\printbiblist[title={Abbreviations of Important Publications},keyword=important]{shorttitle}
\printbibliography
\end{document}

이는 다음을 생성합니다.

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

내 질문:

  1. \printbiblist 단축 버전이 아닌 약어 목록("참조" 아래의 설명과 동일)의 전체 서지 설명을 인쇄하도록 biber's에 지시할 수 있습니까 ?

  2. 보시다시피, 표에는 약어와 서지 설명 사이에 큰 공백이 있습니다. 이는 기사 test2가 더 길기 때문입니다 SHORTTITLE. 당연하게도 필터가 적용되었습니다.~ 후에성경 목록을 처리 중입니다. 이 동작을 피하고 실제로 표시된 약어에 따라 테이블 형식을 지정할 수 있습니까?

감사합니다!

답변1

1위매우 빠르게 해결될 수 있습니다.

\DeclareBibliographyDriver{shorttitle}{\usedriver{}{\thefiel‌​d{entrytype}}\finent‌​ry}

2호locallabelwidth옵션(3.11의 새로운 기능 ) 으로 해결할 수 있습니다 biblatex. 옵션이 true현재 참고 문헌(목록)의 항목만 사용되도록 설정된 경우 레이블 너비를 결정하는 데 사용됩니다.

\printbiblist[title={Abbreviations of Important Publications}, keyword=important, locallabelwidth]{shorttitle}

그런 다음 원하는 출력을 제공합니다.

답변2

좋아요. 나는 이 작업을 수행하지 않았다는 것을 알고 있습니다 biblatex-sbl(여러 필드의 약어를 결합한 목록을 원했습니다.). 하지만 biblatex의 내부에서 매크로 몇 개를 수정하여 문제에 대한 해결책을 찾은 것 같습니다. 나는 부작용이 없을 것이라고 생각하지만 일반적인 것이 아니라 귀하의 질문에 상당히 구체적입니다. 이 시도:

\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{test1,
    AUTHOR = {John Smith},
    TITLE = {A Tremendously Interesting Opinion},
    SHORTTITLE = {TIP},
    JOURNALTITLE = {Journal of Tremendously Interesting Opinions},
    SHORTJOURNAL = {JTIO},
    VOLUME = {1},
    NUMBER = {1},
    YEAR = {1950},
    KEYWORDS = {important},
}
@ARTICLE{test2,
    AUTHOR = {John Tumble},
    TITLE = {A Tremendously Interesting Idea},
    SHORTTITLE = {ABITLONGERSHORTTITLE},
    JOURNALTITLE = {Journal of Tremendously Interesting Ideas},
    VOLUME = {1},
    NUMBER = {1},
    YEAR = {1960},
}
@BOOK{book1,
    AUTHOR = {Peter Johnson},
    TITLE = {A Tremendously Interesting Title of Book One},
    SHORTTITLE = {ATIT},
    TRANSLATOR = {John Smith},
    ORIGLANGUAGE = {german},
    VOLUME = {1},
    LOCATION = {London},
    PUBLISHER = {Publisher},
    YEAR = {1950},
    KEYWORDS = {important},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\pagestyle{empty}

% Print complete bibliographic information in list of abbreviations
\DeclareBibliographyDriver{shorttitle}{\usedriver{}{\thefield{entrytype}}\finentry}

\makeatletter
% Make new importantlabelwidth lengths
\def\do#1{\expandafter\newlength\expandafter{\csname important#1width\endcsname}}
\abx@dolabelfields

% Redefine \blx@bbl@labelfields to also calculate important widths
\def\blx@bbl@labelfields{%
  \def\do##1{%
    \ifcsundef{abx@field@##1}
      {}
      {% calculate label widths
       \blx@setlabwidth{\csname ##1width\endcsname}{%
         \csuse{abx@ffd@*@##1width}{\csname abx@field@##1\endcsname}}%
       % calculate important label widths
       \ifkeyword{important}
         {\blx@setlabwidth{\csname important##1width\endcsname}{%
           \csuse{abx@ffd@*@important##1width}{\csname abx@field@##1\endcsname}}}
         {}}}%
  \abx@dolabelfields}
\makeatother

% New bibliography environment to print the important shorttitles
% This is modified from the standard shorthand bibenvironment
\defbibenvironment{importantshorttitle}
  {\list
     {\printfield[shorthandwidth]{shorttitle}}
     {\setlength{\labelwidth}{\importantshorttitlewidth}%
      \setlength{\leftmargin}{\labelwidth}%
      \setlength{\labelsep}{\biblabelsep}%
      \addtolength{\leftmargin}{\labelsep}%
      \setlength{\itemsep}{\bibitemsep}%
      \setlength{\parsep}{\bibparsep}%
      \renewcommand*{\makelabel}[1]{##1\hss}}}
  {\endlist}
  {\item}

\begin{document}
\nocite{*}

\printbiblist[title={Abbreviations}]{shorttitle}
\printbiblist[title={Abbreviations of Important
Publications},keyword=important,env=importantshorttitle]{shorttitle}
\printbibliography
\end{document}

MWE

관련 정보