PythonTeX 使用 python 模块连接到 .accdb 并对输出进行调整

PythonTeX 使用 python 模块连接到 .accdb 并对输出进行调整

我正在研究如何连接TeX数据库MS Access。对我的工作流程来说,这似乎是个不错的选择PythonTeX,因为对于像我这样的新手来说TeX and Python,它非常容易使用和操作(向 Poore 先生致敬)。

testdb.accdb我正在使用以下代码连接到。testdb.accdb仅包含一个表,,testTable其字段为:IDtestText。假设其内容为(.csv格式为;请告知我,如果 ti 有效,可以通过某种方式附加testdb.accdb或导出.csv,以便更轻松地重现我的问题):

ID,测试文本

1、这将是一次相当漫长的测试。

2、这将是更长的文本,可能跨越几行,实际上,真实的案例甚至可以跨越多个段落。

用于连接testdb.accdb并打印存储在 testTable 中的值的 Python 代码:

import pyodbc

conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=Z:\Databáze\Jazyk Access a SQL\MWE\MWE3\testdb.accdb;')
cursor = conn.cursor()
cursor.execute('select * from testTable')

for row in cursor.fetchall():
    print (row)

在 中IDLE,这会输出带有换行符的每行内容(是\r\n?? 吗),但如果我输入相同的内容PythonTeX pyblock并用 进行可视化\printpythontex,则不会得到这样的换行符,这使得读取输出非常复杂。

IDLE我怎样才能实现与相同的输出PythonTeX

满的MWE

% arara:  lualatex

\documentclass [a4paper, 12pt, twoside, openright] {book}
\usepackage{fontspec}

\usepackage{pythontex}

\begin{document}

Test of printing information from \verb|.accdb| to Python\TeX :

\begin{pyblock}
import pyodbc

conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=Z:\Databáze\Jazyk Access a SQL\MWE\MWE3\testdb.accdb;')
cursor = conn.cursor()
cursor.execute('select * from testTable')

for row in cursor.fetchall():
    print (row)
\end{pyblock}

\vskip 1 cm

\printpythontex

\end{document}

PS:我正在考虑正则表达式,但我对 Python 的学习还没有那么深入,而且我发现很多人对使用正则表达式有强烈的感觉...此外,更好的解决方案是从 Python 端修改输出,而不是从 TeX 端。

答案1

从某种意义上说,PythonTeX 会将您生成的打印输出输入到 LaTeX 中,就好像 Python 输出会逐字粘贴到 LaTeX 文档中一样。这意味着,在您的情况下,打印输出包含换行符,但 LaTeX 不会在输入段落中插入换行符到输出文档中。

因此,如果您想在 LaTeX 中排版打印的 Python 输出,一种选择是将字符串转换为遵循 LaTeX 约定(原始格式选项)或使用逐字环境(\printpythontex[verbatim]):

% arara:  lualatex

\documentclass [a4paper, 12pt, twoside, openright] {book}
\usepackage{fontspec}

\usepackage{pythontex}

\begin{document}

Test of printing information from Python\TeX :

\begin{pyblock}

test_string = "This is a test string with \nlinebreaks."
print(test_string)

test_string_tex = r"This is a test string with \\linebreaks\\using LaTeX notation."
print(test_string_tex)

test_string_double = "This is a test string with two consecutive \n\nlinebreaks \n\n which start a new paragraph."
print(test_string_double)

\end{pyblock}

\vskip 1 cm

\printpythontex

\printpythontex[verbatim]

\end{document}

这排版为 在此处输入图片描述

相关内容