Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Entries without author #267

Closed
fbkarsdorp opened this issue Sep 8, 2021 · 6 comments
Closed

Entries without author #267

fbkarsdorp opened this issue Sep 8, 2021 · 6 comments
Assignees

Comments

@fbkarsdorp
Copy link

fbkarsdorp commented Sep 8, 2021

I'm playing around with this nice package using Jupyter Book. I ran into an issue with entries missing authors (such as books with only an editor, or misc entries with no know author). Can you tell me whether this is supported, or do all entries require an author? Apologies if I need to post my question elsewhere. Thanks!

Full log of the error
# Sphinx version: 3.5.4
# Python version: 3.9.6 (CPython)
# Docutils version: 0.16 release
# Jinja2 version: 3.0.1
# Last messages:
#   looking for now-outdated files...
#   none found
#   pickling environment...
#   done
#   checking consistency...
#   done
#   preparing documents...
#   done
#   writing output... [ 33%] index
#   writing output... [ 66%] introduction-cook-books/notebook
# Loaded extensions:
#   sphinx.ext.mathjax (3.5.4) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/ext/mathjax.py
#   sphinxcontrib.applehelp (1.0.2) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/applehelp/__init__.py
#   sphinxcontrib.devhelp (1.0.2) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/devhelp/__init__.py
#   sphinxcontrib.htmlhelp (2.0.0) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/htmlhelp/__init__.py
#   sphinxcontrib.serializinghtml (1.1.5) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/serializinghtml/__init__.py
#   sphinxcontrib.qthelp (1.0.3) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/qthelp/__init__.py
#   alabaster (0.7.12) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/alabaster/__init__.py
#   sphinx_togglebutton (0.2.3) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx_togglebutton/__init__.py
#   sphinx_copybutton (0.4.0) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx_copybutton/__init__.py
#   myst_nb (0.12.3) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/myst_nb/__init__.py
#   jupyter_book (0.11.3) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/jupyter_book/__init__.py
#   sphinx_thebe (0.0.10) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx_thebe/__init__.py
#   sphinx_comments (0.0.3) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx_comments/__init__.py
#   sphinx_external_toc (0.2.3) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx_external_toc/__init__.py
#   sphinx.ext.intersphinx (3.5.4) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/ext/intersphinx.py
#   sphinx_panels (0.5.2) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx_panels/__init__.py
#   sphinx_book_theme (unknown version) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx_book_theme/__init__.py
#   sphinxcontrib.bibtex (2.2.1) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/bibtex/__init__.py
#   sphinx_jupyterbook_latex (unknown version) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx_jupyterbook_latex/__init__.py
#   pydata_sphinx_theme (unknown version) from ~/.virtualenvs/hda-public/lib/python3.9/site-packages/pydata_sphinx_theme/__init__.py
Traceback (most recent call last):
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/bibtex/style/template.py", line 80, in names
    persons = data['entry'].persons[role]
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/pybtex/utils.py", line 163, in __getitem__
    return self._dict[key.lower()]
KeyError: 'author'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/jupyter_book/sphinx.py", line 167, in build_sphinx
    app.build(force_all, filenames)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/application.py", line 352, in build
    self.builder.build_update()
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/builders/__init__.py", line 296, in build_update
    self.build(to_build,
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/builders/__init__.py", line 360, in build
    self.write(docnames, list(updated_docnames), method)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/builders/__init__.py", line 534, in write
    self._write_serial(sorted(docnames))
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/builders/__init__.py", line 541, in _write_serial
    doctree = self.env.get_and_resolve_doctree(docname, self)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/environment/__init__.py", line 539, in get_and_resolve_doctree
    self.apply_post_transforms(doctree, docname)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/environment/__init__.py", line 585, in apply_post_transforms
    transformer.apply_transforms()
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/transforms/__init__.py", line 86, in apply_transforms
    super().apply_transforms()
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/docutils/transforms/__init__.py", line 171, in apply_transforms
    transform.apply(**kwargs)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/transforms/post_transforms/__init__.py", line 42, in apply
    self.run(**kwargs)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinx/transforms/post_transforms/__init__.py", line 85, in run
    newnode = domain.resolve_xref(self.env, refdoc, self.app.builder,
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/bibtex/domain.py", line 435, in resolve_xref
    format_references(
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/bibtex/style/referencing/__init__.py", line 65, in format_references
    children = [
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/bibtex/style/referencing/__init__.py", line 66, in <listcomp>
    style.inner(role_name).format_data(
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/pybtex/style/template.py", line 130, in format_data
    return self.f(self.children, data, *self.args, **self.kwargs)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/pybtex/style/template.py", line 189, in words
    return join(sep) [children].format_data(data)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/pybtex/style/template.py", line 130, in format_data
    return self.f(self.children, data, *self.args, **self.kwargs)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/pybtex/style/template.py", line 176, in join
    parts = [part for part in _format_list(children, data) if part]
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/pybtex/style/template.py", line 176, in <listcomp>
    parts = [part for part in _format_list(children, data) if part]
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/pybtex/style/template.py", line 150, in <genexpr>
    return (_format_data(part, data) for part in list_)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/pybtex/style/template.py", line 146, in _format_data
    return f(data)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/pybtex/style/template.py", line 130, in format_data
    return self.f(self.children, data, *self.args, **self.kwargs)
  File "~/.virtualenvs/hda-public/lib/python3.9/site-packages/sphinxcontrib/bibtex/style/template.py", line 82, in names
    raise FieldIsMissing(role, data['entry'])
pybtex.style.template.FieldIsMissing: missing author in themstrom:1980
@mcmtroffaes
Copy link
Owner

mcmtroffaes commented Sep 9, 2021

Many thanks for the report and for including a detailed trace. It depends on the style template for the specific entry type as to whether an author is required or not, but IIRC the standard pybtex templates require it for most entry types. For textual citations then an author is currently required. Which is the bibtex entry (or entries) that is causing the problem?

@mcmtroffaes mcmtroffaes self-assigned this Sep 9, 2021
@mcmtroffaes
Copy link
Owner

I just did some quick digging and misc entries without an author should work, as should books with only an editor:

https://bitbucket.org/pybtex-devs/pybtex/src/509d7682987c8d7bfce221ead0e606f1bd88aa72/pybtex/style/formatting/unsrt.py#lines-318
https://bitbucket.org/pybtex-devs/pybtex/src/509d7682987c8d7bfce221ead0e606f1bd88aa72/pybtex/style/formatting/unsrt.py#lines-192

Is the problem only tripping when using textual citations?

@fbkarsdorp
Copy link
Author

Thanks for getting back so quickly!

One of the bibtex entries that is causing the problem is:

@book{themstrom:1980,
  editor =       {Themstrom, Stephan and Orlov, Ann and Handlin, Oscar},
  publisher =    {Cambridge, MA: Belknap},
  title =        {Harvard encyclopedia of American ethnic groups},
  year =         1980
}

This entry was referred to using (see e.g. {cite:t}`themstrom:1980`).

I just found out that the problem indeed only occurs with textual (cite:t) references. That gives me some options to work around it.

@mcmtroffaes
Copy link
Owner

Thanks for the report. I'm looking to improve the citation reference handling when the year and/or author fields are missing.

@mcmtroffaes
Copy link
Owner

Fixed in #268. Thanks again for the report and for the help with testing!

@mcmtroffaes
Copy link
Owner

For information, I've just pushed a minor release including the fix since it seemed quite useful.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants