Vietnamen’s Weblog

Time, Chances, Diligence, Intelligence: which is the most important?

Hiển thị màu cho codes (C, Fortran…) trong tài liệu

leave a comment »

Code highlighting là một chức năng rất cần thiết của các Code-Editor để giúp programmer đọc và viết các đoạn code. Khi soạn thảo một tài liệu, mà trong đó có chèn các đoạn code lập trình, chức năng này hẳn nhiên là cũng rất cần thiết. Vậy, trong LaTeX, làm sao để nó nhận biệt các lệnh lập trình, để phân tách ra khỏi các mã lệnh trong soạn thảo văn bản LaTeX. Sau đây là tổng hợp một vài cách dùng.

Verbatim environment

LaTeX mặc định cho phép bạn khai báo một đoạn text độc lập, có thể chứa các kí hiệu đặc biệt trong LaTeX, là “verbatim” để báo hiệu rằng LaTeX xem các kí hiệu, text bên trong là plain-text. Muốn vậy, đoạn text đó phải nằm giữa \begin{verbatim}\end{verbatim}.

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

Nếu muồn chèn những đoạn plain-text vào giữa các text khác (cái này gọi là inline text) thì ta có thể dùng \verb| text in here |

Tuy nhiên, chức năng hiển thị màu vẫn chưa có ở đây.

Fancyvrb package

Một gói khác là fancyvrb với <Verbatim> cho phép chỉnh fontsize và một số thiết lập khác

\begin{Verbatim}[fontsize=\small]
  Text here
\end{Verbatim}

Listing package

Một lựa chọn khác, đa năng hơn, đó là dùng “listing” package. Nó hỗ trợ syntax-highlightting cho rất nhiều ngôn ngữ.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

Để chèn inline text, ta dùng \lstinline{ code here }
Để thiết lập chung cho toàn văn bản, ta dùng lệnh sau ngay sau \begin{document}
\lstset{language={[77]Fortran}, numbers=left, numberstyle=\tiny,
  stepnumber = 5, numbersep=5pt, keywordstyle=\color{blue}}
  • numbers = vị trí hiển thị line numbers để dễ nhìn code
  • numberstyle = chọn kích cỡ của line numbers
  • stepnumber = số dòng cách nhau cần có line number
  • keywordstyle = tô màu keyword
Tuy nhiên, một số ngôn ngữ vẫn không được hỗ trợ như XML. Đọc thêm manual để có đầy đủ hướng dẫn.

LGrind package

Ta có thể dùng  lgrind package để cung cấp environment và macros, lgrindef chứa thông tin qui định để phân biệt keywords và comment, comment và strings…

Download and copy the file lgrind.sty, lgrindef in here to the folder where LaTeX file locate.

You can

  • embed the code file into LaTeX file with \lagrind or \lgrindfile command: \lgrindfile{filename}, \lagrind[htbp]{filename}{caption}{label}
  • mark group of lines as programming code: %(    code here  )%            or          @  short_hand code here @
  • produce indented code on an own line: %[   code here %]
  • for long code, you can specifically insert page breaks  using %*
  • insert your own code with %=

NOTICE: a float text cannot longer than 1 page.

\documentclass{article}
\usepackage[options]{lgrind}

\begin{document}
The keyword @ if @ in C/C++ means a condition. Now, we look at the following code
%(
if (x == 10) then x = x + 1;
)%
\end{document}

Các options có thể dùng là

  1. procnames:
  2. noprocindex
  3. fussy: let LaTeX print all overfull hboxes
  4. norules: suppress the surrounding rules
  5. nolineno: don’t print line numbers
  6. lineno5 : prints line number every 5 lines (default is 10)
  7. leftno : print line number in the left margin (default is right)

Languages supported by lgrind

Ada LATEXa RATFOR
Asm LDL RLaBb
Asm68 Lex Russell
BASICa Linda SASc
Batchb Lisp (Emacs) Schemed
C MASMa sh
C++ MATLABa SICStusb
csh MLd src
FORTRAN Mercury SQL
Gnuplote model Tcl/Tkf
Icon Modula2 VisualBasica
IDLg Pascal VMSasm
ISP PERL yacc
Java PostScript
Kimwitu++ PROLOG

References:

  1. http://stackoverflow.com/questions/300521/latex-package-to-do-syntax-highlighting-of-code-in-various-languages
  2. http://www.ctan.org/tex-archive/macros/latex/contrib/listings/
  3. http://www.ctan.org/tex-archive/nonfree/support/lgrind/
  4. http://www.faqs.org/faqs/lisp-faq/part6/section-4.html

MatLab code

Để hiển thị MatLab code được hoàn chỉnh, bạn down file mcode.sty do Florian Knorr biên soạn và cho phép dùng mở, lưu vào thư mục của project.

Tiếp đến, bạn thêm dòng lệnh để sử dụng file này

\usepackage[options]{mcode}

với options có thể là các tuỳ chọn sau:

bw : nếu muốn keyword được bôi đậm, nghiêng, và tô màu xám (phù hợp khi muốn in ra văn bản dạng text)
numbered : nếu muốn đánh số dòng code
framed : nếu muốn có khung bao quanh
final : khi mà tuỳ chọn  draft đã được thiết lập toàn cục, mọi dòng code sẽ không được in ra, để giải quyết, bạn dùng tuỳ chọn final.

References:

  1. http://my.opera.com/locksley90/blog/2008/02/25/how-to-include-matlab-source-code-in-a-latex-document

Written by vietnamen

Tháng Tư 14, 2009 lúc 10:39 sáng

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: