Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Related question

Using the sample code on this site, http://hgesser.com/software/latexdb/workshop.html, I would like to

  • query my MySQL database and typeset using XeLaTeX.

This is because all of my documents are set up using UTF8 and \usepackage{fontspec}. I have checked out the documentation and I cannot seem to find anything on it. The typesetting python script latexdb.py may have the answer, but I am not a pro on the internal code in there. Does anyone have insight on this?


I have contacted the maker of LaTeXDB and he responded:

I believe that the specific TeX dialect you use should be irrelevant, you'd only have to modify the LaTeXDB script since it makes explicit calls to pdfLaTeX or latex [...] This assumes that xelatex uses input files with an encoding that my script can cope with; UTF-8 and ISO-Latin-* should be fine.

Based on this information, I just modified the command at the bottom of LaTeXDB, changing the LaTeX command to XeLaTeX like

# call latex with all options from the dblatex command line
 xelatex $@
 mv -f $pretex.backup $pretex

In the following code you've got your database connection variables:

  • Database: mydatabase
  • Table: mytable
  • column hd
  • column md

Now loop over the rows (records) in mytable for columns hdand md and print the output into a table.

The Code

\texdbdef{##query1}{select hd,md from mytable}{##hd,##md}

This is a header for the page.

Hochdeutsch & Mantakisch \\
\texdbfor{##query1}{\hline \textit{##hd} & \textbf{##md}\\}


Why do I keep getting this error when typesetting with LaTeXDB?

(It seems like it isn't really typesetting with XeLaTeX)

latexdb database.tex
Pre-Compiling database.tex (loop 1)
Traceback (most recent call last):
  File "/opt/local/bin/latexdb.py", line 274, in <module>
  File "/opt/local/bin/latexdb.py", line 262, in _main_
  File "/opt/local/bin/latexdb.py", line 151, in texDBparseForLoop
    for qR in texDBresult(queryString):
  File "/opt/local/bin/latexdb.py", line 68, in texDBresult
NameError: global name 'db' is not defined
This is XeTeX, Version 3.1415926-2.4-0.9998 (TeX Live 2012/MacPorts 2012_7)
 restricted \write18 enabled.
entering extended mode
LaTeX2e <2011/06/27>
Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, lo
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
* LaTeX warning: "xparse/redefine-command"
* Redefining document command \oldstylenums with arg. spec. 'm' on line 107.
) (/opt/local/share/texmf-texlive-dist/tex/latex/fontspec/fontspec-xetex.sty

LaTeX Warning: Unused global option(s):

(./database.aux) (/opt/local/share/texmf-texlive-dist/tex/latex/tipa/t3cmr.fd))


Mr. Eßer also noted that there are two newer reimplementations of his code

  1. http://www.ctan.org/pkg/ratexdb (Ruby based)
  2. https://sourceforge.net/projects/nlatexdb/ (C based)

...It should be noted that I have been awarded the Tumbleweed badge, yoohoo! (with sarcasm) for this question....


If anybody reading this needs a solution NOW like me and you don't care how it gets done, you could setup MySQL-python (MySQLdb) and just generate the code necessary for a XeLaTeX longtable.

  1. Save the following code as database.py.
  2. Run

    python database.py > ~/Desktop/database.txt

  3. Then copy and paste that data into your TeX document. Compile as you normally would. (Don't forget to include \usepackage{longtable}.) Or even better, use \include{./database.txt}. You move the longtable (or longtabu) environment from the python code directly into the master document for better control.
Python Code:

# a simple script to pull some data from MySQL

import MySQLdb

db = MySQLdb.connect(host="localhost", user="root", passwd="yourpassword", db="databasename")


#create a cursor for the select
cur = db.cursor()

cur.execute('SET NAMES utf8;')
cur.execute('SET CHARACTER SET utf8;')
cur.execute('SET character_set_connection=utf8;')

#execute an sql query
cur.execute("SELECT column1,column2 FROM table")

print "\\begin{longtable}{| p{.20\textwidth} | p{.80\textwidth} |}"

for row in cur.fetchall() :
      #data from rows
        column1_name = str(row[0])
        column2_name = str(row[1])

        print "" + column1_name + " & " + column2_name +  "\\\\" + "\n" + "\\hline"

# close the cursor

# close the connection
db.close ()

print "\\end{longtable}"
share|improve this question

closed as unclear what you're asking by Joseph Wright Aug 11 '13 at 11:44

Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question.If this question can be reworded to fit the rules in the help center, please edit the question.

And the question is? –  egreg Apr 10 '13 at 9:41
hold your horses I am actively working on formulating it now... adding specifics. Thanks though. I am trying to clarify this. Ok I posted my error message –  macmadness86 Apr 10 '13 at 9:44
I don't see any error in the stuff posted: really not sure waht we are being asked! –  Joseph Wright Aug 11 '13 at 11:44

Browse other questions tagged or ask your own question.