일반적인 pdflatex-bibtex 루프를 실행합니다.
\documentclass{article}
\usepackage[american,ngerman]{babel}%%% The book is in German.
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{TheTerminator,
author={James Cameron},
title={The {Terminator}},
year=1984,
language={american}
}
@misc{TerminatorTwo,
author={James Cameron},
title={Terminator 2: Judgement Day},
year=1991,
language={american}
}
@misc{TerminatorThree,
author={Jonathan Mostow},
title={Terminator 3: Rise of the Machines},
year=2003,
language={american}
}
\end{filecontents}
\usepackage{babelbib} % Multilingual bibliographies
\begin{document}
Wir schauten \cite{TheTerminator,TerminatorTwo,TerminatorThree}.
\bibliographystyle{babalpha-fl-gs-sort}%%% Avoid problematic abbreviations such as SS and SA, see https://tex.stackexchange.com/a/441877/165772. Also disabmiguate "Ber89"; see https://tex.stackexchange.com/a/472956/165772.
\bibliography{\jobname}
\end{document}
출력을 산출합니다
Wir Schauten [Cam84, Cam91, Mos03].
그 다음에는 문헌 목록이 나옵니다. 어떻게 얻을 수 있습니까?
Wir Schauten [Cam84, Cam91 및 Mos03].
\cite{TheTerminator, TerminatorTwo}, and \cite{TerminatorThree}
작업 흐름을 변경하지 않고 자동으로(즉, 와 같은 것을 작성하지 않고 ), 즉 여전히 pdflatex, babel, babelbib, bibtex를 사용하고 있습니까? 스타일 파일을 패치하고(@moewe!!!에 감사드립니다) 매크로를 작성할 수 있습니다.
답변1
이 구현의 일반적인 아이디어는 다음에서 크게 영감을 받았습니다.후안 A. 나바로'에스답변에게 Natbib: \citet 기반 인용 목록의 마지막 쉼표를 "and"로 바꾸는 방법은 무엇입니까?.
LaTeX는 목록을 처리할 때 \cite
목록을 반복하고 \@for
각 항목에 대해 동일한 단계를 적용합니다. 내가 아는 한, 아직 마지막 항목에 있다는 것을 알 수 있는 간단한 방법이 없으므로 마지막 인용 앞에 다른 구분 기호를 삽입하려면 약간의 속임수가 필요합니다.
여기서의 아이디어는 기본적으로 루프 뒤에 처리 단계를 추가하는 대신 루프를 한 단계 "지연"하는 것입니다. 이렇게 하면 마지막 처리 단계가 어디에서 발생하는지 알 수 있습니다.
\@citex
LaTeX 커널의 표준 정의이며 \@citexi
루프 작업을 수행하는 비트입니다.
\documentclass{article}
\usepackage[american,ngerman]{babel}
\usepackage{babelbib}
\makeatletter
\newcommand*{\@citexi}[1]{%
\if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi
\@ifundefined{b@#1}
{\hbox{\reset@font\bfseries ?}%
\G@refundefinedtrue
\@latex@warning
{Citation `#1' on page \thepage \space undefined}}%
{\@cite@ofmt{\csname b@#1\endcsname}}}
\def\@citex[#1]#2{\leavevmode
\let\@last@citeb\relax
\let\@citea\@empty
\@cite
{\@for\@citeb:=#2\do
{\ifx\@last@citeb\relax\else
\@citea\def\@citea{,\penalty\@m\ }%
\@citexi{\@last@citeb}%
\fi
\edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
\let\@last@citeb\@citeb}%
\ifx\@last@citeb\relax\else
\ifx\@citea\@empty\else
\ \btxandcomma{}\btxandshort{}\ %
\fi
\@citexi{\@last@citeb}%
\fi}
{#1}}
\makeatother
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{TheTerminator,
author={James Cameron and Anne Elk},
title={The {Terminator}},
year=1984,
language={american}
}
@misc{TerminatorTwo,
author={James Cameron},
title={Terminator 2: Judgement Day},
year=1991,
language={american}
}
@misc{TerminatorThree,
author={Jonathan Mostow and Anne Elk and Emma Sigfridsson},
title={Terminator 3: Rise of the Machines},
year=2003,
language={american}
}
\end{filecontents}
\begin{document}
Wir schauten \cite{TheTerminator,TerminatorTwo,TerminatorThree}.
Wir schauten \cite{TheTerminator,TerminatorTwo}.
Wir schauten \cite{TheTerminator}.
\bibliographystyle{babalpha-fl}
\bibliography{\jobname}
\end{document}
참고문헌 스타일은 답변과 전혀 관련이 없기 때문에 어떻게 태어났고 어디서 얻을 수 있는지 babalpha-fl
에 대한 이야기를 따르지 않은 사람들이 예제에 더 쉽게 접근할 수 있도록 다시 변경했습니다.babalpha-fl-gs-sort