一般的に
\Citeauthor{aristotle:rhetoric,aristotle:poetics}
Aristotle; Aristotle
単に ではなくタイプセットしますAristotle
。これを避けるために、私は\citeauthor
と の友人に、相手と同じように行動するよう助けを求めました\textcite
。それに応じて、私は素晴らしいmoeweからの回答それは私の のコードの一部になりました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