imprimir lista de citas con "und" en alemán

imprimir lista de citas con "und" en alemán

Ejecutando el bucle habitual pdflatex-bibtex en

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

produce la salida

Wir schauten [Cam84, Cam91, Mos03].

seguido de la lista de literatura. ¿Cómo se puede conseguir

Wir scauten [Cam84, Cam91 y Mos03].

automáticamente (es decir, no escribiendo algo como \cite{TheTerminator, TerminatorTwo}, and \cite{TerminatorThree}) sin cambiar el flujo de trabajo, es decir, ¿seguir usando pdflatex, babel, babelbib, bibtex? Se nos permite parchear el archivo de estilo (¡¡gracias a @moewe!!!) y se nos permite escribir macros.

Respuesta1

La idea general de esta implementación está fuertemente inspirada enJuan A. Navarro'srespuestaa Natbib: ¿Cómo reemplazar la última coma en una lista de citas basada en \citet con "y"?.

Cuando LaTeX procesa la \citelista, simplemente recorre la lista \@fory aplica los mismos pasos para cada elemento. Hasta donde yo sé, todavía no existe una manera sencilla de saber que estás en el último elemento, por lo que se necesita un poco de astucia para insertar un separador diferente antes de la última cita.

La idea aquí es básicamente "retrasar" el ciclo un paso a costa de agregar un paso de procesamiento adicional después del ciclo. De esa manera sabemos dónde ocurre el último paso del procesamiento.

\@citexes la definición estándar del kernel LaTeX y \@citexies el bit que realiza la acción del bucle.

\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 y MES03].//Wir schauten [CE84 y Cam91].//Wir schauten [CE84].

Dado que el estilo de la bibliografía es completamente irrelevante para la respuesta, volví a cambiarlo para babalpha-flque el ejemplo sea más accesible para aquellos que no han seguido la historia de cómo babalpha-fl-gs-sortnació y dónde conseguirlo.

información relacionada