.png)
Me estoy rompiendo la cabeza con ese problema, sin encontrar nada que pueda ayudarme en Internet:
El problema inicial es que escribo un ensayo en francés pero necesito incluir algunos artículos escritos en inglés y, por lo tanto, diferentes estilos de cita. Como el francés es el idioma principal, utilizo unsrtnat-fr
el estilo de bibliografía del natbib
paquete, que produce citas como "Nombre1yNombre2" (dos autores) usando \citet
. Me gustaría recuperar el estilo normal para determinadas partes en inglés "Nombre1yNombre". Mi solución es definir un comando personalizado, digamos \encitet
, que reemplace" y "por" y "en el resultado de \citet
.
Probé diferentes definiciones pero finalmente no puedo entender cómo hacerlo... Cada vez hay un problema con la expansión del argumento.
Aquí está el pseudocódigo del comando que me gustaría definir:
\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
}
Y aquí está el archivo TeX que uso para mis pruebas:
\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}
y el archivo dorsal:
@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"
}
Y el comando de compilación:
pdflatex test.tex && pdflatex test.tex && bibtex test && pdflatex test.tex && pdflatex test.tex
Te agradezco de antemano por tu ayuda
Respuesta1
Esto no funcionará. \citet es una macro demasiado complicada, no se puede recuperar su salida de una manera sencilla. Si realmente desea seguir con natbib (en el lenguaje biblatex, el soporte está integrado), debe manipular el archivo .bst. Guárdelo con otro nombre en su carpeta de documentos y luego cambie las palabras fijas para que emitan comandos. P.ej
FUNCTION{fr.and}{ %% le "et" entre les deux derniers auteurs
" \authorand{} "
}
Luego puede dar a los comandos definiciones sensatas en su documento.