Использование полностью развернутого результата как простой строки (с citet и \IfSubStr)

Использование полностью развернутого результата как простой строки (с citet и \IfSubStr)

Я ломаю голову над этой проблемой, не найдя ничего, что могло бы помочь в Интернете:

Первоначальная проблема в том, что я пишу эссе на французском языке, но мне нужно включить некоторые статьи, написанные на английском языке, и, следовательно, разные стили цитирования. Поскольку французский язык является основным, я использую unsrtnat-frстиль библиографии из natbibпакета, который создает цитирования как "Name1этИмя2" (два автора) с использованием \citet. Я хотел бы восстановить нормальный стиль для заданных английских частей "Имя1иИмя". Мое решение — определить пользовательскую команду, скажем, \encitet, которая заменяет" эт "к" и "в результате \citet.

Я пробовал разные определения, но в итоге так и не понял, как это сделать... Каждый раз возникает проблема с расширением аргумента.

Вот псевдокод команды, которую я хотел бы определить:

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

А вот файл TeX, который я использую для своих тестов:

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

и файл с нагрудным номером:

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

И команда компиляции:

pdflatex test.tex && pdflatex test.tex && bibtex test && pdflatex test.tex && pdflatex test.tex

Заранее благодарю вас за помощь.

решение1

Это не сработает. \citet — слишком сложный макрос, вы не можете получить его вывод простым способом. Если вы действительно хотите придерживаться natbib (в языке biblatex поддержка встроена), вам следует изменить .bst-файл. Сохраните его под другим именем в папке с документами, а затем измените фиксированные слова так, чтобы они выдавали команды. Например

FUNCTION{fr.and}{       %% le "et" entre les deux derniers auteurs
" \authorand{} "
}

Затем вы можете дать командам разумные определения в своем документе.

Связанный контент