Citando con En Dash

Oct 31 2020

A volte ho bisogno di scrivere uno stimatore di Newey-West (1987) piuttosto che uno stimatore di Newey e West (1987) come segue.

\documentclass{article}

\usepackage{filecontents,natbib}
\begin{filecontents}{z.bib}
@article{newey1987simple,
  title={A Simple, Positive Semi-Definite, Heteroskedasticity and Autocorrelation},
  author={Newey, Whitney K and West, Kenneth D},
  journal={Econometrica},
  volume={55},
  number={3},
  pages={703--708},
  year={1987}
}
\end{filecontents}
\bibliographystyle{apalike}

\begin{document}

\citeauthor{newey1987simple}'s \citeyearpar{newey1987simple} estimator.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Newey--West (1987) estimator.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\bibliography{z}

\end{document}

In questo modo, posso citare un articolo con i nomi degli autori collegati tramite un trattino?

Risposte

3 moewe Oct 31 2020 at 18:54

Se lo stile della tua bibliografia supporta un delimitatore di nome personalizzabile, sarebbe facile come modificare localmente questo delimitatore. Sfortunatamente, non tutti i .bstfile supportano un delimitatore di nome personalizzabile, molti si limitano a codificare "e".

Il passaggio 1 consiste apalikenell'utilizzare un delimitatore personalizzabile nelle citazioni. A questa fine

  1. Individua apalike.bstsulla tua macchina. Puoi farlo digitando kpsewhich apalike.bstnella riga di comando / terminale. In alternativa, ottenere una copia del file da CTANhttp://mirrors.ctan.org/biblio/bibtex/base/apalike.bst

  2. Copia il file in una posizione in cui TeX possa trovarlo. La directory dei documenti andrà bene. Guarda anchehttps://texfaq.org/FAQ-inst-wlcf

  3. Rinomina il file in apalike-namedelim.bst, ad esempio (la licenza di apalike.bstrichiede di cambiare il nome se modifichi il file)

  4. Trova FUNCTION {format.lab.names}(ll. 841-587) e sostituisci la definizione completa della funzione con

     FUNCTION {format.lab.names}
     { 's :=
       s #1 "{vv~}{ll}" format.name$ s num.names$ duplicate$ #2 > { pop$ " et~al." * }
         { #2 <
             'skip$ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
                 { " et~al." * }
                 { "\finalnamedelim " * s #2 "{vv~}{ll}" format.name$ * } if$
             }
           if$ } if$
     }
    
  5. Aggiungi un commento con il tuo nome, la data corrente e una breve descrizione delle modifiche all'inizio del file.

  6. Usa \bibliographystyle{apalike-namedelim}invece che \bibliographystyle{apalike}nel tuo documento.

In alternativa ai passaggi da 1 a 5 è possibile ottenere la versione con patch del file all'indirizzo https://gist.github.com/moewew/1808df0569958a79ce5058b133495260

Il passaggio 2 consiste nell'utilizzare la macro personalizzabile nei nuovi comandi che definiamo allo scopo di citarli con trattini. Copiamo semplicemente le definizioni di \citete \citeauthorda natbib.stye inseriamo del codice da modificare \finalnamedelim.

\documentclass{article}

\usepackage{natbib}
\bibliographystyle{apalike-namedelim}

\newcommand*{\finalnamedelim}{}
\DeclareRobustCommand*{\finalnamedelim}{ and }

\makeatletter
\newcommand*{\citetattr}{}
\DeclareRobustCommand\citetattr
   {\begingroup
    \DeclareRobustCommand*{\finalnamedelim}{--}%
    \NAT@swafalse\let\NAT@ctype\z@\NAT@partrue
     \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
     
\newcommand*{\citeauthorattr}{}
\DeclareRobustCommand\citeauthorattr
   {\begingroup
    \DeclareRobustCommand*{\finalnamedelim}{--}%
    \NAT@swafalse\let\NAT@ctype\@ne\NAT@parfalse
    \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}

\newcommand*{\Citetattr}{}
\DeclareRobustCommand\Citetattr
   {\begingroup
    \DeclareRobustCommand*{\finalnamedelim}{--}%
    \NAT@swafalse\let\NAT@ctype\z@\NAT@partrue
     \let\NAT@up\NAT@Up
     \@ifstar{\NAT@fulltrue\NAT@citetp}{\NAT@fullfalse\NAT@citetp}}
\makeatother

\begin{filecontents}{\jobname.bib}
@article{newey1987simple,
  title   = {A Simple, Positive Semi-Definite, Heteroskedasticity 
             and Autocorrelation Consistent Covariance Matrix},
  author  = {Newey, Whitney K. and West, Kenneth D.},
  journal = {Econometrica},
  volume  = 55,
  number  = 3,
  pages   = {703--708},
  year    = 1987,
}
\end{filecontents}

\begin{document}
\citeauthor{newey1987simple}'s \citeyearpar{newey1987simple} estimator.

\citetattr{newey1987simple} --- with citation alias

\bibliography{\jobname}
\end{document}


Questo genere di cose è un po 'più semplice con biblatex.

\documentclass[british]{article}

\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear]{biblatex}

\newcommand*{\textattrcite}{%
  \AtNextCite{\AtEachCitekey{\delimcontext{textattrcite}}}%
  \textcite}

\DeclareDelimFormat[textattrcite]{multinamedelim}{\textendash}
\DeclareDelimAlias[textattrcite]{finalnamedelim}[textattrcite]{multinamedelim}

\begin{filecontents}{\jobname.bib}
@article{newey1987simple,
  title   = {A Simple, Positive Semi-Definite, Heteroskedasticity 
             and Autocorrelation Consistent Covariance Matrix},
  author  = {Newey, Whitney K. and West, Kenneth D.},
  journal = {Econometrica},
  volume  = 55,
  number  = 3,
  pages   = {703--708},
  year    = 1987,
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\citeauthor{newey1987simple}'s \parencite*{newey1987simple} estimator.

\textattrcite{newey1987simple} --- with citation alias

\printbibliography
\end{document}
2 Mico Oct 31 2020 at 18:25

Poiché si utilizza il natbibpacchetto di gestione delle citazioni, è possibile utilizzarne \defcitealiase le \citetaliasmacro per raggiungere il proprio obiettivo di formattazione.

\documentclass{article}

\begin{filecontents}[overwrite]{z.bib}
@article{newey1987simple,
  title  ={A Simple, Positive Semi-Definite, Heteroskedasticity 
           and Autocorrelation Consistent Covariance Matrix},
  author ={Newey, Whitney K. and West, Kenneth D.},
  journal={Econometrica},
  volume =55,
  number =3,
  pages  ={703--708},
  year   =1987,
}
\end{filecontents}

\usepackage{natbib}
\defcitealias{newey1987simple}{Newey--West (1987)}
\bibliographystyle{apalike}

\begin{document}
\setlength\parindent{0pt} % just for this example

\citeauthor{newey1987simple}'s \citeyearpar{newey1987simple} estimator.

\citetalias{newey1987simple} --- with citation alias

Newey--West (1987) --- brute force

\bibliography{z}
\end{document}