Как добавить ссылку на фигуру в ячейке латексной таблицы в pylatex - PullRequest
0 голосов
/ 04 июня 2019

Я использую pylatex, и мне нужно добавить ссылку на помеченную фигуру в ячейке латексной таблицы в табличной среде с помощью команды add_row.Какой правильный синтаксис?Кажется, простая строка не работает.

Я попытался добавить ссылку, используя простую строку, например:

tabular.add_row('P' + str(j), param, 'Figure' + NoEscape('\ref{fig:param' + str(j) + '}'))

или

tabular.add_row('P' + str(j), param, 'Figure' + '\ref{fig:param' + str(j) + '}')

или

tabular.add_row('P' + str(j), param, 'Figure' + str(Ref('param' + str(j))))

Далее приведен минимальный воспроизводимый пример, который вы можете запустить в Python.Пожалуйста, установите HOME_FOLDER с вашей личной домашней папкой (синтаксис зависит от Windows или Linux, я использую Linux)


from pylatex import Document, Package, Command, NoEscape, Section, Table, Center, Tabular, Figure, Label
import subprocess
import numpy as np
import matplotlib.pyplot as plt
import os

time = np.arange(0, 10, 0.001)
frequency = 0.2
y1 = np.sin(2*np.pi*frequency*time)
y2 = np.cos(2*np.pi*frequency*time)

HOME_FOLDER = os.path.join('/home', 'Documents')
texFileName = os.path.join(HOME_FOLDER, 'test')

plt.figure()
plt.plot(time, y1)
plt.savefig(os.path.join(HOME_FOLDER, 'firstParam.pdf'))
plt.close()

plt.figure()
plt.plot(time, y2)
plt.savefig(os.path.join(HOME_FOLDER, 'secondParam.pdf'))
plt.close()

geometry_options = {"top": "2.5cm", "left": "2.25cm", "right": "2.25cm", "bottom": "2.0cm"}

doc = Document(texFileName, documentclass="article", document_options=["12pt", "a4paper"], geometry_options=geometry_options)

doc.packages.append(Package('xcolor', 'table'))
doc.packages.append(Package("caption", "font=normalsize, tableposition=below"))
doc.preamble.append(Command('captionsetup', 'skip=1em', 'longtable'))
doc.packages.append(Package('fancyhdr'))
doc.preamble.append(Command('pagestyle', 'fancy'))
doc.preamble.append(Command('fancyhead', '', 'R'))
doc.packages.append(Package('titlesec'))
doc.preamble.append(Command('setcounter', 'secnumdepth', extra_arguments='4'))

doc.packages.append(Package(NoEscape('eso-pic')))
doc.packages.append(Package('adjustbox'))
doc.packages.append(Package('float'))
doc.packages.append(Package('pdfpages'))
doc.packages.append(Package('array'))
doc.packages.append(Package('hyperref', 'hidelinks'))

paramsList = ['firstParam', 'secondParam']

with doc.create(Section("First Section")):

    with doc.create(Table(position='ht')) as table:
        with table.create(Center()) as centered:
            with centered.create(Tabular('|l|c|c|')) as tabular:
                tabular.add_hline()
                for j, param in enumerate(paramsList):
                    tabular.add_row('P' + str(j), param, 'Figure' + '\ref{fig:param' + str(j) + '}')
                    tabular.add_hline()    
            table.add_caption('List of Parameters')

    for j, param in enumerate(paramsList):        
        with doc.create(Figure(position='H')) as plot:
            plot.add_image(os.path.join(HOME_FOLDER, param + '.pdf'))
            plot.add_caption(param)
            plot.append(Label('fig:param' + str(j)))

doc.generate_tex()
buildInfo = None

for _ in range(1):
        p = subprocess.Popen("pdflatex -synctex=1 -interaction=nonstopmode {} > LaTeX_Output.txt".format(texFileName), shell=True, bufsize=-1, 
                                stdout=subprocess.DEVNULL, cwd=None)
texFileName.replace('.tex', '.pdf')

Мой ожидаемый результат - наличие кликабельной ссылки в ячейке таблицы на связанный параметрцифра, то есть Figure 1, вместо этого я вижу простой текст, то есть Figure er{fig:param0}

1 Ответ

0 голосов
/ 05 июня 2019

ОК, я решил эту проблему просто с помощью метода dumps_as_content():

 with doc.create(Table(position='ht')) as table:
        with table.create(Center()) as centered:
            with centered.create(Tabular('|l|c|c|')) as tabular:
                tabular.add_hline()
                for j, param in enumerate(paramsList):
                    tabular.add_row('P' + str(j), param, NoEscape('Fig. ' + Ref('fig:param' + str(j)).dumps_as_content())))
                    tabular.add_hline()    
            table.add_caption('List of Parameters')
...