Hola, hemos encontrado la respuesta a lo que andabas buscando, deslízate y la encontrarás un poco más abajo.
Solución:
Vinculando postnotes en citep
ya se abordó en una pregunta anterior. Para establecer la puntuación en texto negro, puede parchear los comandos de puntuación internos de natbib. Estos parches se pueden diferir hasta el comienzo de su documento para tener en cuenta el hecho de que los comandos de puntuación son redefinibles (con, digamos, bibpunct
) en cualquier punto del preámbulo de su documento.
documentclassarticle
usepackagenatbib
usepackage[colorlinks]hyperref
usepackageetoolbox
makeatletter
% count citations
pretocmd[email protected]%
let[email protected]@[email protected]@citex
def[email protected]#2%
setcounter[email protected]@cites0%
setcounter[email protected]@cites0%
forcsvliststepcounter[email protected]@cites@gobble#3
newcounter[email protected]@cites
newcounter[email protected]@cites
def[email protected]
% include postnote and citet closing bracket in hyperlink
def[email protected]@citex#1%
stepcounter[email protected]@cites%
[email protected]@citeb@[email protected]@citeb#1%
ifnumequalvalue[email protected]@citesvalue[email protected]@cites
if*[email protected]*else[email protected][email protected]globaldef[email protected]fi%
[email protected]elseifrelax[email protected]relax
else[email protected]@closegloballet[email protected]@emptyfifi% avoid compact citations
[email protected]
renewcommand[email protected][2]#1
% avoid extraneous postnotes, closing brackets
patchcmd[email protected]
[email protected]elseif*#2*else[email protected]#2fi
ifrelax[email protected]relaxelse[email protected]@closefifi
patchcmd[email protected]
ifrelax[email protected]relax[email protected]@citeaelse[email protected]@[email protected]fi
ifrelax[email protected]relax[email protected]@citeaelse[email protected]@[email protected]fi
patchcmd[email protected]if*#3*if*[email protected]*
% all punctuation black
AtBeginDocument%
preto[email protected]textcolorblackbgroup%
appto[email protected]egroup%
preto[email protected]textcolorblackbgroup%
appto[email protected]egroup%
preto[email protected]textcolorblackbgroup%
appto[email protected]egroup%
preto[email protected]textcolorblackbgroup%
appto[email protected]egroup%
preto[email protected]textcolorblackbgroup%
appto[email protected]egroup%
preto[email protected]textcolorblackbgroup%
appto[email protected]egroup
makeatother
beginfilecontentsjobname.bib
@bookcompanion,
author = Goossens, Michel and Mittelbach, Frank and Samarin, Alexander,
title = The LaTeX Companion,
edition = 1,
publisher = Addison-Wesley,
location = Reading, Mass.,
year = 1994
@bookadams:life,
title = Life, the Universe and Everything,
author = Adams, Douglas,
series = The Hitchhiker's Guide to the Galaxy,
publisher = Pan Macmillan,
year = 1980
@bookadams:rest,
title = The Restaurant at the End of the Universe,
author = Douglas Adams,
series = The Hitchhiker's Guide to the Galaxy,
publisher = Pan Macmillan,
year = 1980
endfilecontents
newcommandcmd[1]textbackslashtexttt#1
begindocument
noindent
cmdcitet: citet[e.g.][pp.~1--10]companion \
cmdcitet: citet[pp.~1--10]companion,adams:rest,adams:life \
cmdcite: cite[e.g.][p.~100]adams:life; citeadams:rest \
cmdcitep: citep[e.g.][p.~1--10]adams:rest,adams:life \
cmdcitetext; cmdcitealp:
citetextsee citealp[pp.~10]adams:rest; or even better citealpadams:life \
cmdciteauthor: citeauthoradams:life; citeauthorcompanion \
cmdciteyear: citeyearadams:life; citeyearadams:rest \
bibliographystyleplainnat
bibliographyjobname
enddocument
Jugando con mi problema y usando la solución de egreg en una publicación anterior, encontré una solución que funciona para mi caso específico:
Definí nuevos comandos mycitet
y mycitep
De este modo
usepackagetwoopt
usepackageifthen
newcommandblack[1]textcolor[rgb]0,0,0#1
newcommandtwooptmycitet[3][aa][bb]%
ifthenelseequal#1aa % if nargin == 1
hyperlinkcite.#3citeauthor#3 black(citeyear#3black) % citetkey
ifthenelseequal#2bb % elseif nargin == 2
hyperlinkcite.#3citeauthor#3 black(citeyear#3black,~#1black) % citet[pg]key
ifthenelseequal#1 % elseif #1 = []
hyperlinkcite.#3citeauthor#3 black(citeyear#3black,~#2black) % citet[][pg]key
ifthenelseequal#2 % elseif #2 == []
hyperlinkcite.#3citeauthor#3 black(#1~citeyear#3black) % citet[eg][]key
% % else
hyperlinkcite.#3citeauthor#3 black(#1~citeyear#3black,~#2black) % citet[eg][pg]key
}
makeatletter
newcommandmulticite[1]% taken from egreg, see link
@tempswafalse
@fornext:=#1do
[email protected]
;~else@tempswatruefi
hyperlinkcite.nextciteauthornextblack,~citeyearnext%
%
makeatother
newcommandtwooptmycitep[3][aa][bb]%
ifthenelseequal#1aa % if nargin == 1
(multicite#3) % citepkey(s)
ifthenelseequal#2bb % elseif nargin == 2
(hyperlinkcite.#3citeauthor#3black,~citeyear#3black,~#1) % citep[pg]key
ifthenelseequal#1 % elseif #1 = []
(hyperlinkcite.#3citeauthor#3black,~citeyear#3black,~#2) % citep[][pg]key
ifthenelseequal#2 % elseif #2 == []
(#1~multicite#3) % citep[eg][]key(s)
% % else
(#1~hyperlinkcite.#3citeauthor#3black,~citeyear#3black,~#2) % citep[eg][pg]key
}
y con fines de demostración también cambié el documento a
begindocument
begintabularlll
& Audrey & me, myself and I \
hlinehline
citetkey & citetauthor08 & mycitetauthor08 \
citet[pg]key & citet[pg.7]author08 & mycitet[pg.7]author08 \
citet[ ][pg]key & citet[][pg.7]author08 & mycitet[][pg.7]author08 \
citet[eg][ ]key & citet[e.g.][]author08 & mycitet[e.g.][]author08 \
citet[eg][pg]key & citet[e.g.][pg.7]author08 & mycitet[e.g.][pg.7]author08 \
hline
citepkey & citepauthor08 & mycitepauthor08 \
citep[pg]key & citep[pg.7]author08 & mycitep[pg.7]author08 \
citep[ ][pg]key & citep[][pg.7]author08 & mycitep[][pg.7]author08 \
citep[eg][ ]key & citep[e.g.][]author08 & mycitep[e.g.][]author08 \
citep[eg][pg]key & citep[e.g.][pg.7]author08 & mycitep[e.g.][pg.7]author08 \
hline
citepkey1,key2 & citepauthor08,buthor90 & mycitepauthor08,buthor90 \
citep[eg][ ]key1,key2 & citep[e.g.][]author08,buthor90 & mycitep[e.g.][]author08,buthor90 \
endtabular
bibliographystyleplainnat
bibliographyjobname
enddocument
para obtener exactamente lo que quiero:
Sin embargo, si bien esto puede servir perfectamente como una demostración de lo que quiero, preferiría una solución general a esta específica como
- este enfoque no adapta los paréntesis a bibliographystyle automáticamente
- podría estropear otros comandos si yo
letcitepmycitep
yletcitetmycitet
PD: ¿Alguien puede explicar cómo el fragmento de egreg sabe que ‘,’ es mi delimitador?
Recuerda que tienes la capacidad de interpretar tu experiencia .