일반적으로
\Citeauthor{aristotle:rhetoric,aristotle:poetics}
단순히 .Aristotle; Aristotle
Aristotle
이를 피하기 위해 나는 \citeauthor
친구들이 \textcite
상대방처럼 행동할 수 있도록 도움을 요청했습니다. 그 대답으로 나는 훌륭한 평가를 받았다.모에의 대답내 biblatex.cfg
.
이것은 authoryear
스타일에 아주 잘 작동합니다. 그러나 다른 경우에는 잘 작동하지 않습니다. 이것은 완벽하게 이해할 수 있지만 인간의 실수(특히 내 실수)에 대한 더 많은 증거를 만들고 싶습니다.
이상적인 세계에서는 코드가 분명히 모든 스타일에서 작동할 것입니다. 그러나 다음 질문이 더 현실적이기를 바랍니다.
알려진 호환 스타일이 로드된 경우에만 변경 사항을 실행하기 위해 현재 스타일을 확인할 수 있습니까? 예를 들어 (인용) 스타일이 매크로에 저장되어 있는지 확인할 수 있나요?
분명히, 나는 다시 돌아갈 것이지만 Aristotle; Aristotle
나는 그것으로 살아갈 수 있습니다. 내가 피하고 싶은 것은 아리스토텔레스가 복제되지 않고 오히려 제거되거나 사라지는 훨씬 더 불길한 시나리오입니다.
\documentclass{article}
\usepackage[backend=biber,style=verbose]{biblatex}
\bibliography{biblatex-examples}
\makeatletter
% ateb moewe: http://tex.stackexchange.com/a/352471/ addaswyd o gôd Biblatex am \textcite et al.
% BEGIN redefine \citeauthor et al. to behave more like \textcite et al.
\providebibmacro*{cite:reinit}{%
\global\undef\cbx@lasthash
\global\undef\cbx@lastyear
}
\providebibmacro*{cite:init}{\usebibmacro{cite:reinit}}
\newbibmacro*{citeauthor}{%
\ifnameundef{labelname}
{\usebibmacro{cite:reinit}}
{%
\iffieldequals{namehash}{%
\cbx@lasthash
}{}{%
\printnames{labelname}%
\stepcounter{textcitecount}%
\savefield{namehash}{\cbx@lasthash}%
}%
}%
\setunit{\textcitedelim}%
}
\DeclareCiteCommand{\cbx@citeauthor}
{%
\usebibmacro{cite:init}%
}{%
\usebibmacro{citeindex}%
\usebibmacro{citeauthor}%
}{}{%
\usebibmacro{postnote}%
}
\providerobustcmd{\cbx@textcite@init}[2]{%
\setcounter{textcitetotal}{0}%
\setcounter{textcitecount}{0}%
\def\cbx@savedcites{#1}#2\cbx@savedcites\empty}
\DeclareCiteCommand{\citeauthor}[\cbx@textcite@init\cbx@citeauthor]{%
\gdef\cbx@savedkeys{}%
\citetrackerfalse
\pagetrackerfalse
\DeferNextCitekeyHook
\usebibmacro{cite:init}%
}{%
\ifthenelse{%
\iffirstcitekey\AND\value{multicitetotal}>0%
}{%
\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
\global\clearfield{multipostnote}%
}{}%
\xappto\cbx@savedkeys{\thefield{entrykey},}%
\iffieldequals{namehash}{%
\cbx@lasthash
}{}{%
\stepcounter{textcitetotal}%
\savefield{namehash}{\cbx@lasthash}%
}%
}{}
{%
\protected@xappto\cbx@savedcites{%
[\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}%
}%
}
\DeclareDelimcontextAlias{cbx@citeauthor}{textcite}
% END redefine \citeauthor et al
\makeatother
\begin{document}
\Citeauthor{aristotle:rhetoric,aristotle:poetics}
\end{document}
답변1
답변2
이는 보충설명이다앙리 멘케의 답변, 다른 사람이 이와 같은 것을 필요로 하는 경우를 대비하여. 해당 답변을 바탕으로 biblatex.cfg
.
% ateb Henri Menke: https://tex.stackexchange.com/a/365438/
% bibstyle name: \csname blx@bbxfile\endcsname
% citestyle name: \csname blx@cbxfile\endcsname
\newif\ifcfr@biblatex@authorcomp
\cfr@biblatex@authorcompfalse
\def\cfr@blx@splitfile#1-#2\@null{#1}
\edef\tempa{\expandafter\cfr@blx@splitfile\blx@cbxfile-x\@null}
\edef\tempb{authoryear}
\edef\tempc{authortitle}
\edef\tempd{alphabetic}
\edef\tempe{numeric}
\edef\tempf{reading}
\ifx\tempa\tempb
\cfr@biblatex@authorcomptrue
\else\ifx\tempa\tempc
\cfr@biblatex@authorcomptrue
\else\ifx\tempa\tempd
\cfr@biblatex@authorcomptrue
\else\ifx\tempa\tempe
\cfr@biblatex@authorcomptrue
\else\ifx\tempa\tempf
\cfr@biblatex@authorcomptrue
\fi
\fi
\fi
\fi
\fi
\ifcfr@biblatex@authorcomp
...
\else
...
\fi
거의 모든 스타일이 가능하지만 verbose
moewe가 제공하는 재정의에는 문제가 없습니다. 그러나 안전을 위해, 나는 괜찮게 작동하는 표준 스타일에 대해 좀 더 장황한 검사를 했습니다. 제외하고는 verbose
괜찮지 않은 것과 draft
특별한 debug
경우입니다.