我正在研究如何连接TeX
数据库MS Access
。对我的工作流程来说,这似乎是个不错的选择PythonTeX
,因为对于像我这样的新手来说TeX and Python
,它非常容易使用和操作(向 Poore 先生致敬)。
testdb.accdb
我正在使用以下代码连接到。testdb.accdb
仅包含一个表,,testTable
其字段为:ID
,testText
。假设其内容为(.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}