ドイツ語で「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}

出力は

私たちは[Cam84, Cam91, Mos03]を見ました。

文献リストが続きます。

私たちは[Cam84、Cam91、Mos03]を見ました。

ワークフローを変更せずに、つまり pdflatex、babel、babelbib、bibtex を引き続き使用せずに、自動的に ( のようなものを記述するのではなく\cite{TheTerminator, TerminatorTwo}, and \cite{TerminatorThree}) 実行できますか? スタイル ファイルにパッチを適用したり (thx to @moewe!!!)、マクロを記述したりできます。

答え1

この実装の基本的な考え方は、フアン・A・ナバロ答えNatbib: \citet ベースの引用リストの最後のコンマを「and」に置き換えるにはどうすればよいでしょうか?

LaTeX が\citeリストを処理するとき、リストをループし\@for、各項目に同じ手順を適用します。私の知る限り、最後の項目に到達したかどうかを簡単に判断する方法はないので、最後の引用の前に別の区切りを挿入するには少し工夫が必要です。

ここでの考え方は、基本的に、ループの後に処理ステップを追加するという犠牲を払って、ループを 1 ステップだけ「遅らせる」ことです。こうすることで、最後の処理ステップがどこで行われるかがわかります。

\@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}

私たちは [CE84、Cam91、MES03] を見ました。//私たちは [CE84、Cam91] を見ました。//私たちは [CE84] を見ました。

参考文献のスタイルは回答とはまったく関係がないので、どのように誕生し、どこで入手できるのかbabalpha-flというストーリーを追っていない人にも例がわかりやすくなるように、元に戻しました。babalpha-fl-gs-sort

関連情報