Перекрестно-ссылочные номера фигур по разделам с Python Docx - PullRequest
0 голосов
/ 04 февраля 2019

Я использовал python-docx для создания больших документов, полных таблиц и рисунков, соответствующих стандартному шаблону.Я обнаружил, как сделать их перекрестными ссылками, используя https://github.com/python-openxml/python-docx/issues/359.Однако это обозначает мои цифры / таблицы, начиная с 1 в каждом разделе и продолжая до следующего раздела, где он перезапускается с 1.

Я бы хотел, чтобы номера фигур зависели от номера раздела (т.е. 1-й рисунок в 2-мраздел = рисунок 2.1 и т. д.).Кто-нибудь знает возможно ли это?

В настоящее время нумерация производится с помощью функции:

def Table(paragraph):
 from docx.oxml import OxmlElement
 from docx.oxml.ns import qn
 run = run = paragraph.add_run()
 r = run._r
 fldChar = OxmlElement('w:fldChar')
 fldChar.set(qn('w:fldCharType'), 'begin')
 r.append(fldChar)
 instrText = OxmlElement('w:instrText')
 instrText.text = ' SEQ TableMain \* ARABIC \s 1 '
 print instrText
 r.append(instrText)
 fldChar = OxmlElement('w:fldChar')
 fldChar.set(qn('w:fldCharType'), 'end')
 r.append(fldChar)

Вызывается следующим кодом, который также заполняет таблицу и заголовок и нижний колонтитул таблицы

        table3 = document.add_table(rows=1, cols=1)
        table3.cell(0,0).text="Table "
        for paragraph in table4.cell(0,0).paragraphs:
            paragraph.style = document.styles['Caption']
            Table(paragraph)
            paragraph.add_run(text="this is the full table name")
        row_cells = table3.add_row().cells
        call_func_that_makes_actual_table(row_cells[0],...)
        row_cells = table3.add_row().cells 
        row_cells[0].text="Source: ..."
        for paragraph in row_cells[0].paragraphs:
            paragraph.style = document.styles['Source']

Это производиттаблица типа this

Принимая во внимание, что я хотел бы нумерацию таблицы как this

1 Ответ

0 голосов
/ 05 февраля 2019

Мне удалось решить это самостоятельно, решение добавляет дополнительную функцию:

def section(paragraph):
 from docx.oxml import OxmlElement
 from docx.oxml.ns import qn
 run = run = paragraph.add_run()
 r = run._r
 fldChar = OxmlElement('w:fldChar')
 fldChar.set(qn('w:fldCharType'), 'begin')
 r.append(fldChar)
 instrText = OxmlElement('w:instrText')
 instrText.text = ' STYLEREF 1 \s '
 r.append(instrText)
 fldChar = OxmlElement('w:fldChar')
 fldChar.set(qn('w:fldCharType'), 'end')
 r.append(fldChar)

и изменяет вызов на:

    for paragraph in table.cell(1,0).paragraphs:
          paragraph.style = document.styles['Caption']
          section(paragraph)
          paragraph.add_run(text=".")   
          Figure(paragraph)
          paragraph.add_run(text=": this is the full table name")
...