印刷德語中帶有“und”的引文列表

印刷德語中帶有“und”的引文列表

運行通常的 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

這個實現的總體思路很大程度上受到以下啟發胡安·納瓦羅回答Natbib:如何用「and」替換基於 \citet 的引文清單中的最後一個逗號?

當 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}

Wir schauten [CE84、Cam91 和 MES03].//Wir schauten [CE84 和 Cam91].//Wir schauten [CE84]。

由於參考書目風格與答案完全無關,我改回了答案,babalpha-fl以便那些沒有關注如何babalpha-fl-gs-sort出生和從哪裡獲得它的故事的人更容易理解這個例子。

相關內容