From 6f58b77566d9ffeb3621c486ec41e111dd19942e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 23 Jan 2022 21:51:53 +0530 Subject: [PATCH] BibTeX catalogs: Support tags like custom columns. Fixes #1958773 [bibtex export ignores custom fields](https://bugs.launchpad.net/calibre/+bug/1958773) --- src/calibre/library/catalogs/bibtex.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/calibre/library/catalogs/bibtex.py b/src/calibre/library/catalogs/bibtex.py index 65d75edbff..27feade593 100644 --- a/src/calibre/library/catalogs/bibtex.py +++ b/src/calibre/library/catalogs/bibtex.py @@ -5,14 +5,17 @@ __license__ = 'GPL v3' __copyright__ = '2012, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import re, codecs, os, numbers +import codecs +import numbers +import os +import re from collections import namedtuple from calibre import strftime from calibre.customize import CatalogPlugin -from calibre.library.catalogs import FIELDS, TEMPLATE_ALLOWED_FIELDS from calibre.customize.conversion import DummyReporter from calibre.ebooks.metadata import format_isbn +from calibre.library.catalogs import FIELDS, TEMPLATE_ALLOWED_FIELDS from polyglot.builtins import string_or_bytes @@ -107,12 +110,12 @@ class BIBTEX(CatalogPlugin): "Applies to: BIBTEX output format"))] def run(self, path_to_output, opts, db, notification=DummyReporter()): - from calibre.utils.date import isoformat - from calibre.utils.html2text import html2text - from calibre.utils.bibtex import BibTeX from calibre.library.save_to_disk import preprocess_template - from calibre.utils.logging import default_log as log + from calibre.utils.bibtex import BibTeX + from calibre.utils.date import isoformat from calibre.utils.filenames import ascii_text + from calibre.utils.html2text import html2text + from calibre.utils.logging import default_log as log library_name = os.path.basename(db.library_path) @@ -140,8 +143,11 @@ class BIBTEX(CatalogPlugin): for field in fields: if field.startswith('#'): item = db.get_field(entry['id'],field,index_is_id=True) + m = db.new_api.field_metadata[field] if isinstance(item, (bool, numbers.Number)): item = repr(item) + elif m.get('is_multiple'): + item = m['is_multiple']['list_to_ui'].join(filter(None, item)) elif field == 'title_sort': item = entry['sort'] elif field == 'library_name':