.png)
Ich zerbreche mir den Kopf über dieses Problem, ohne im Internet etwas zu finden, das helfen könnte:
Das anfängliche Problem ist, dass ich einen Aufsatz auf Französisch schreibe, aber einige Artikel auf Englisch einfügen muss und daher unterschiedliche Zitierstile brauche. Da Französisch die Hauptsprache ist, verwende ich den unsrtnat-fr
Bibliographiestil aus natbib
dem Paket, der Zitate als „Name1“ erzeugt.undName2" (zwei Autoren) mit \citet
. Ich möchte den normalen Stil für bestimmte englische Teile wiederherstellen "Name1UndName". Meine Lösung besteht darin, einen benutzerdefinierten Befehl zu definieren, sagen wir \encitet
, der ersetzt" und "von" Und "im Ergebnis von \citet
.
Ich habe verschiedene Definitionen ausprobiert, aber letztendlich verstehe ich nicht, wie das geht ... Jedes Mal gibt es ein Problem mit der Argumenterweiterung.
Hier ist der Pseudocode des Befehls, den ich definieren möchte:
\newcommand{\encitet}[1]{%
% 1 : store the result of \citet{#1} in tmp (as a simple string)
% 2 : test if 'et al.' is found into the string
% 3 : if found then return tmp
% 4 : else return the replacement of every " et " by " and " in tmp
}
Und hier ist die TeX-Datei, die ich für meine Tests verwende:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{trace}
\usepackage{xspace}
\usepackage{xstring}
\usepackage{etoolbox}
\usepackage{stringstrings}
\usepackage[square,numbers]{natbib}
\bibliographystyle{abbrvnat-fr}
% Here is the problem
\newcommand{\encitet}[1]{%
\def\tmp{\expandafter\citet{#1}}%
%\edef\tmp\expandafter{\mytemp{#1}}%
%
\expandafter\IfSubStr{\tmp}{et al.}{%
\tmp%
}{%
\StrSubstitute{\tmp}{ et }{ and }%
}\xspace%
}
% Example that works
\newcommand{\encitett}[1]{%
\def\mytemp{\expandafter\citet{#1}}%
\expandafter\ifstrequal\mytemp{#1}{a}{"a" was given}{not a}, %
\expandafter\ifstrequal\mytemp{#1}{b}{"b" was given}{not b}%
}
\begin{document}
% Example with two authors
\encitet{einstein}
% Example with more than two authors
\encitet{latexcompanion}
\citep{knuthwebsite}
\medskip
\bibliography{sample}
\end{document}
und die Bib-Datei:
@article{einstein,
author = "Albert Einstein and AnotherGuy ForTheTest",
title = "{Zur Elektrodynamik bewegter K{\"o}rper}. ({German})
[{On} the electrodynamics of moving bodies]",
journal = "Annalen der Physik",
volume = "322",
number = "10",
pages = "891--921",
year = "1905",
DOI = "http://dx.doi.org/10.1002/andp.19053221004"
}
@book{latexcompanion,
author = "Michel Goossens and Frank Mittelbach and Alexander Samarin",
title = "The \LaTeX\ Companion",
year = "1993",
publisher = "Addison-Wesley",
address = "Reading, Massachusetts"
}
@misc{knuthwebsite,
author = "Donald Knuth",
title = "Knuth: Computers and Typesetting",
url = "http://www-cs-faculty.stanford.edu/\~{}uno/abcde.html"
}
Und der Kompilierungsbefehl:
pdflatex test.tex && pdflatex test.tex && bibtex test && pdflatex test.tex && pdflatex test.tex
Ich danke euch im Voraus für eure Hilfe
Antwort1
Das funktioniert nicht. \citet ist ein viel zu kompliziertes Makro, dessen Ausgabe man nicht auf einfache Weise abrufen kann. Wenn Sie wirklich bei natbib bleiben wollen (in Biblatex ist die Sprachunterstützung eingebaut), sollten Sie die .bst-Datei manipulieren. Speichern Sie sie unter einem anderen Namen in Ihrem Dokumentordner und ändern Sie dann die festgelegten Wörter so, dass sie Befehle ausgeben. Beispiel:
FUNCTION{fr.and}{ %% le "et" entre les deux derniers auteurs
" \authorand{} "
}
Anschließend können Sie den Befehlen in Ihrem Dokument sinnvolle Definitionen geben.