sphinxcontrib.bibtex.style.referencing.extra_author 源代码
from dataclasses import dataclass, field
from typing import TYPE_CHECKING, Iterable, List
from sphinxcontrib.bibtex.style.template import reference
from . import BaseReferenceStyle, BracketStyle, PersonStyle
if TYPE_CHECKING:
from pybtex.richtext import BaseText
from pybtex.style.template import Node
[文档]
@dataclass
class ExtraAuthorReferenceStyle(BaseReferenceStyle):
"""Reference just by author names."""
#: Bracket style.
bracket: BracketStyle = field(default_factory=BracketStyle)
#: Person style.
person: PersonStyle = field(default_factory=PersonStyle)
[文档]
def role_names(self) -> Iterable[str]:
return [
f"{capfirst}author{parenthetical}{full_author}"
for parenthetical in ["par", ""]
for capfirst in (["", "c"] if parenthetical == "" else [""])
for full_author in ["", "s"]
]
[文档]
def outer(self, role_name: str, children: List["BaseText"]) -> "Node":
return self.bracket.outer(
children,
brackets="par" in role_name,
capfirst="c" in role_name,
)
[文档]
def inner(self, role_name: str) -> "Node":
return reference[self.person.author_or_editor_or_title(full="s" in role_name)]