我正在寻找一个在LaTeX中排版SQL语句的包。到目前为止,我听说过listings和lgrind,还有其他建议吗?
[edit]添加了要求:我希望软件包能够智能地插入分页符,以便在可能的语句中不跨越多个页面。仍在阅读文档,因此有可能任何一个a / m都能够这样做 - 如果是这种情况,请告诉我。
相关:question
答案 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中的分页从来没有像破线一样好,所以我不会不幸的是,抱着太多的希望。