biblatex-chicago
actually goes through quite great length to achieve the output you get.
The following modifications undoes the behaviour of adding the postnote to the parentheses
\renewcommand*{\postnotedelim}{\addspace}
\makeatletter
\renewbibmacro*{textcite:postnote}{%
\ifbool{cbx:parens}%
{\bibcloseparen\global\boolfalse{cbx:parens}}%
{}%
\iffieldundef{postnote}%
{}%
{\savefield{namehash}{\cbx@lastyear}%
\setunit{\postnotedelim}%
\printfield{postnote}}%
\ifthenelse{\value{multicitecount}=\value{multicitetotal}}%
{}%
{\textcitedelim}}% Not \multicitedelim ???
\makeatother
The old version from chicago-authordate.cbx
had the \bibcloseparen
part at the end of the macro, resulting in the closing parentheses after the postnote.
To always have the year in parentheses (even in \parencite
), we have to redefine the cite
bibmacro. Since the standard parens
field format in biblatex
will use square brackets []
within nested parentheses, we also have to define a simpler version of that format to always use parentheses - regardless of the nesting-level.
\DeclareFieldFormat{parenshc}{(#1)}
\makeatletter
\newbibmacro*{cite}{%
\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}}%
{\iffieldequalstr{entrysubtype}{classical}% Similar to notes+bib
{\iffieldundef{shorthand}%
{\ifthenelse{\ifnameundef{labelname}\OR
\ifentrytype{inreference}\OR
\ifentrytype{reference}\OR
\ifentrytype{mvreference}}% Simplified for CMS
{\usebibmacro{cite:label}%
\setunit{\addspace}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}%
{\iffieldundef{postnote}%
{\setunit{\compcitedelim}}%
{}%
\usebibmacro{cite:label}}
{\iffieldequals{namehash}{\cbx@lastyear}%
{}%
{\usebibmacro{cmsbracketname}% For names in []
\ifentrytype{customc}%
{\newcunit}%
{\setunit{\addspace}}}%
\usebibmacro{cite:label}%
\iffieldundef{postnote}%
{\savefield{namehash}{\cbx@lasthash}}%
{\savefield{namehash}{\cbx@lastyear}}}}}%
{\usebibmacro{cite:shorthand+title}}}
{\iffieldundef{shorthand}%
{\ifthenelse{\ifnameundef{labelname}\OR
\ifentrytype{inreference}\OR
\ifentrytype{reference}\OR
\ifentrytype{mvreference}}% Simplified for CMS
{\usebibmacro{cite:label}%
\setunit{\addspace}%
\printtext[parenshc]{\usebibmacro{cmscitesortdate}}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}%
{\iffieldundef{postnote}%
{\setunit{\compcitedelim}}%
{}%
\printtext[parenshc]{\usebibmacro{cmscitesortdate}}}
{\iffieldequals{namehash}{\cbx@lastyear}% Is this right?
{}%
{\usebibmacro{cmsbracketname}%
\setunit{\nameyeardelim}}%
\printtext[parenshc]{\usebibmacro{cmscitesortdate}}%
\iffieldundef{postnote}%
{\savefield{namehash}{\cbx@lasthash}}%
{\savefield{namehash}{\cbx@lastyear}}}}}%
{\usebibmacro{cite:shorthand}}}}%
\setunit{\multicitedelim}}% ???
\makeatother
This modification will cause the standard \cite
to have the year in parentheses as well, I'm not sure whether that's what you wanted, but it would get quite messy if we took care of that as well.
MWE
\documentclass[american]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[authordate,backend=biber]{biblatex-chicago}
\addbibresource{biblatex-examples.bib}
\DeclareFieldFormat{parenshc}{(#1)}
\renewcommand*{\postnotedelim}{\addspace}
\makeatletter
\newbibmacro*{cite}{%
\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}}%
{\iffieldequalstr{entrysubtype}{classical}% Similar to notes+bib
{\iffieldundef{shorthand}%
{\ifthenelse{\ifnameundef{labelname}\OR
\ifentrytype{inreference}\OR
\ifentrytype{reference}\OR
\ifentrytype{mvreference}}% Simplified for CMS
{\usebibmacro{cite:label}%
\setunit{\addspace}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}%
{\iffieldundef{postnote}%
{\setunit{\compcitedelim}}%
{}%
\usebibmacro{cite:label}}
{\iffieldequals{namehash}{\cbx@lastyear}%
{}%
{\usebibmacro{cmsbracketname}% For names in []
\ifentrytype{customc}%
{\newcunit}%
{\setunit{\addspace}}}%
\usebibmacro{cite:label}%
\iffieldundef{postnote}%
{\savefield{namehash}{\cbx@lasthash}}%
{\savefield{namehash}{\cbx@lastyear}}}}}%
{\usebibmacro{cite:shorthand+title}}}
{\iffieldundef{shorthand}%
{\ifthenelse{\ifnameundef{labelname}\OR
\ifentrytype{inreference}\OR
\ifentrytype{reference}\OR
\ifentrytype{mvreference}}% Simplified for CMS
{\usebibmacro{cite:label}%
\setunit{\addspace}%
\printtext[parenshc]{\usebibmacro{cmscitesortdate}}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}%
{\iffieldundef{postnote}%
{\setunit{\compcitedelim}}%
{}%
\printtext[parenshc]{\usebibmacro{cmscitesortdate}}}
{\iffieldequals{namehash}{\cbx@lastyear}% Is this right?
{}%
{\usebibmacro{cmsbracketname}%
\setunit{\nameyeardelim}}%
\printtext[parenshc]{\usebibmacro{cmscitesortdate}}%
\iffieldundef{postnote}%
{\savefield{namehash}{\cbx@lasthash}}%
{\savefield{namehash}{\cbx@lastyear}}}}}%
{\usebibmacro{cite:shorthand}}}}%
\setunit{\multicitedelim}}% ???
\renewbibmacro*{textcite:postnote}{%
\ifbool{cbx:parens}%
{\bibcloseparen\global\boolfalse{cbx:parens}}%
{}%
\iffieldundef{postnote}%
{}%
{\savefield{namehash}{\cbx@lastyear}%
\setunit{\postnotedelim}%
\printfield{postnote}}%
\ifthenelse{\value{multicitecount}=\value{multicitetotal}}%
{}%
{\textcitedelim}}% Not \multicitedelim ???
\makeatother
\begin{document}
As was discovered \textcite[210]{cicero} and \textcite[210]{wilde} \parencite[210]{cicero} and \cite[210]{wilde}.
\textcite{wilde,cicero} vs \parencite{wilde,cicero}.
\textcite{baez/article,wilde,cicero} vs \parencite{baez/article,wilde,cicero}.
\printbibliography
\end{document}
To incorporate your hyperlink fixes try the following MWE. Note that you will not have to add any other hyperlink code to this snippet. I have incorporated the code you posted in your update into this version.
\documentclass[american]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[authordate,backend=biber]{biblatex-chicago}
\usepackage{hyperref}
\addbibresource{biblatex-examples.bib}
\DeclareFieldFormat{parenshc}{(#1)}
\renewcommand*{\postnotedelim}{\addspace}
\makeatletter
\newbibmacro*{cite}{\printtext[citehyperref]{%
\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}}%
{\iffieldequalstr{entrysubtype}{classical}% Similar to notes+bib
{\iffieldundef{shorthand}%
{\ifthenelse{\ifnameundef{labelname}\OR
\ifentrytype{inreference}\OR
\ifentrytype{reference}\OR
\ifentrytype{mvreference}}% Simplified for CMS
{\usebibmacro{cite:label}%
\setunit{\addspace}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}%
{\iffieldundef{postnote}%
{\setunit{\compcitedelim}}%
{}%
\usebibmacro{cite:label}}
{\iffieldequals{namehash}{\cbx@lastyear}%
{}%
{\usebibmacro{cmsbracketname}% For names in []
\ifentrytype{customc}%
{\newcunit}%
{\setunit{\addspace}}}%
\usebibmacro{cite:label}%
\iffieldundef{postnote}%
{\savefield{namehash}{\cbx@lasthash}}%
{\savefield{namehash}{\cbx@lastyear}}}}}%
{\usebibmacro{cite:shorthand+title}}}
{\iffieldundef{shorthand}%
{\ifthenelse{\ifnameundef{labelname}\OR
\ifentrytype{inreference}\OR
\ifentrytype{reference}\OR
\ifentrytype{mvreference}}% Simplified for CMS
{\usebibmacro{cite:label}%
\setunit{\addspace}%
\printtext[parenshc]{\usebibmacro{cmscitesortdate}}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}%
{\iffieldundef{postnote}%
{\setunit{\compcitedelim}}%
{}%
\printtext[parenshc]{\usebibmacro{cmscitesortdate}}}
{\iffieldequals{namehash}{\cbx@lastyear}% Is this right?
{}%
{\usebibmacro{cmsbracketname}%
\setunit{\nameyeardelim}}%
\printtext[parenshc]{\usebibmacro{cmscitesortdate}}%
\iffieldundef{postnote}%
{\savefield{namehash}{\cbx@lasthash}}%
{\savefield{namehash}{\cbx@lastyear}}}}}%
{\usebibmacro{cite:shorthand}}}}%
\setunit{\multicitedelim}}}% ???
\renewbibmacro*{textcite:postnote}{%
\ifbool{cbx:parens}%
{\bibcloseparen\global\boolfalse{cbx:parens}}%
{}%
\iffieldundef{postnote}%
{}%
{\savefield{namehash}{\cbx@lastyear}%
\setunit{\postnotedelim}%
\printfield{postnote}}%
\ifthenelse{\value{multicitecount}=\value{multicitetotal}}%
{}%
{\textcitedelim}}% Not \multicitedelim ???
\DeclareFieldFormat{citehyperref}{%
\DeclareFieldAlias{bibhyperref}{noformat}% Avoid nested links
\bibhyperref{#1}}
\DeclareFieldFormat{textcitehyperref}{%
\DeclareFieldAlias{bibhyperref}{noformat}% Avoid nested links
\bibhyperref{%
#1%
\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}}}
\renewbibmacro*{textcite}{%
\iftoggle{cms@los}%
{\printtext[textcitehyperref]{\usebibmacro{textcite:authshort}}}%
{\printtext[textcitehyperref]{\usebibmacro{textcite:citeshort}}}}
\makeatother
\begin{document}
As\footcite[See][]{knuth:ct:a,knuth:ct:b} was discovered \textcite[210]{cicero} and \textcite[210]{wilde} \parencite[210]{cicero} and \cite[210]{wilde}.
\textcite{wilde,cicero} vs \parencite{wilde,cicero}.\footcite{wilde}
\textcite{baez/article,wilde,cicero} vs \parencite{baez/article,wilde,cicero}.
\printbibliography
\end{document}
Best Answer
The
\bibfont
hook is used to set the font for the bibliography. It is an ordinary LaTeX macro (not a BibLaTeX bibmacro), so you need to renew it with\renewcommand
, as for example:The hook for all citations is
\citesetup
, which is defined inbiblatex.def
. You can modify it using the LaTeX\renewcommand*
command. By default\citesetup
is set to:You would want to put something like
\rmfamily
or\normalfont
or whatever in your renewed version:You could be inventive and define a separate command
\citefont
and put that into\citesetup
, thus creating a parallel to\bibfont
. If you want to have this in all of your documents then you can put it into thebiblatex.cfg
file.I am unaware of any hook run at the end of a citation, so you may not be able to easily tack things on the end without hacking the citation commands.