什么包可用于在LaTeX中排版SQL?

时间:2009-04-21 00:39:57

标签: sql latex typeset

我正在寻找一个在LaTeX中排版SQL语句的包。到目前为止,我听说过listingslgrind,还有其他建议吗?

[edit]添加了要求:我希望软件包能够智能地插入分页符,以便在可能的语句中不跨越多个页面。仍在阅读文档,因此有可能任何一个a / m都能够这样做 - 如果是这种情况,请告诉我。

相关:question

2 个答案:

答案 0 :(得分:12)

我使用listings包,但主要用于代码段。我一般不需要担心分页符。 listings的一大优点是可用的高度灵活性。例如,我没有大写我的SQL,但我可以用大写的关键字打印我的列表:

\makeatletter
\newcommand{\lstuppercase}{\uppercase\expandafter{\expandafter\lst@token
                           \expandafter{\the\lst@token}}}
\newcommand{\lstlowercase}{\lowercase\expandafter{\expandafter\lst@token
                           \expandafter{\the\lst@token}}}
\makeatother

\lstdefinestyle{Oracle}{basicstyle=\ttfamily,
                        keywordstyle=\lstuppercase,
                        emphstyle=\itshape,
                        showstringspaces=false,
                        }

并根据需要定义更多关键字:

\lstdefinelanguage[Oracle]{SQL}[]{SQL}{
  morekeywords={ACCESS, MOD, NLS_DATE_FORMAT, NVL, REPLACE, SYSDATE,
                TO_CHAR, TO_NUMBER, TRUNC},
}

要使用这些定义:

\lstset{language=[Oracle]SQL,
        style=Oracle,
       }

如果我要打印出更大的代码片段,我要么不要担心分页符,要么写一个预处理器来将代码分开,然后再传递给LaTeX

答案 1 :(得分:6)

您想要使用listings包。你想用它做一件具体的事吗,或者你只是问一般哪种套餐效果最好?我从来没有遇到listings的任何大问题,虽然让它完全做我想要的有时候很棘手(它是LaTeX;期待其他任何东西都是愚蠢的)。

编辑(解决您的编辑问题):智能分页可能有问题;这肯定超出了我的能力。 listings可能能够通过显式标记来实现(转移到LaTeX并在适当的位置插入负分页符惩罚;可能是macro-izable),但我不认为listings可以自动执行此操作,我怀疑LGrind也能这样做。你可能有更好的运气搜索或询问特定于LaTeX的列表(Usenet上的comp.text.tex是一个值得尝试的好地方),但TeX中的分页从来没有像破线一样好,所以我不会不幸的是,抱着太多的希望。