Vietnamen’s Weblog

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

Archive for the ‘LaTeX’ Category

LaTeX

with one comment

Hôm nay tôi muốn giới thiệu chút ít về LaTeX, một ngôn ngữ định dạng giúp soạn thảo các tài liệu (article, book, report) một cách professional. Về mặt editor, tôi lựa chọn emacs (xin xem bài TeX-editor)

Phần ngôn ngữ, tôi không đề cập ở đây. Chỉ nói sơ qua về các plug-in cần thiết để soạn thảo LaTeX trong emacs,  cấu trúc (template) một file định dạng LaTeX mà tôi hay dùng, và các mẹo vặt kèm theo.

AUCTeX

Một plug-in hữu hiệu để biên soạn LaTeX trong emacs.

  • Xóa các file tạm

M-x TeX-clean                    : xóa các file tạm

  • Save

C-x C-s

  • Compile

C-c C-c

  • C-c C-s: insert a new section, chapter, part…
  • C-c C-e: insert a new environment (custom or predefined).
  • C-c C-m: insert a new macro.
  • C-c C-f C-b: insert bold face text.
  • C-c C-f C-i: insert italics text.
  • C-c C-f C-e: insert emphasized text.
  • C-c C-f C-t: insert typewriter text.
  • C-c C-f C-d: delete the innermost font specification containing point.
  • C-c C-p C-d: parse the entire document, looking for embedded environments to preview.
  • C-c C-p C-p: preview the current embedded environment (or middle-click on the preview object).

References:

  1. http://emacsworld.blogspot.com/2008/04/cleaning-up-or-deleting-latex.html

Texlive-base package

Texlive-base là tuyển tập rất nhiều styles cần dùng cho LaTeX. Tuy nhiên dung lượng khá lớn. Nếu bạn không cần dùng nhiều như vậy, giải pháp là download từ CTAN các packages cần thiết về. Để đảm bảo khỏi phải tạo bản sao cũa mỗi styles cho các tài liệu khác nhau, ta sẽ thiết lập 1 đường dẫn chung để lưu trữ chúng. Cụ thể sẽ được nói tới ở phần Search TeX styles.

Bibtex mode

Bibtex mode là một mode hay dùng để soạn thảo file bibtex dùng để chứa các thông tin về các article, book, book chapter cần tham khảo.

References:

  1. http://jo.irisson.free.fr/bstdatabase/ [Search mọi loại style dựa trên Journal title]
  2. http://amath.colorado.edu/documentation/LaTeX/basics/steps/bibstyles.html

RefTex mode

RefTex là mode hay dùng giúp thêm các tham khảo vào trong file LaTeX dễ dàng.

  • Add bibliography referece

C-c [

  • Add link reference

C-c )

Mỗi khi file .bib được cập nhật. Thường bạn cần re-load lại file đó trong emacs để nội dung mới có thể được tìm thấy với RefTex. Để đơn giản bước đó, bạn chỉ cần set env-variable BIBINPUTS là đường dẫn tới thư mục gốc có chứa các file .bib. E.g. trong file ~/.bashrc

    export BIBINPUTS=".:~/latex/:"

hay trong ~/.profile

    BIBINPUTS=".:~/latex/:"

Mỗi lần nhấn C-c [ , Reftex sẽ tự động update nội dung mọi file .bib bên trong đường dẫn đó. Điểm hay là nó update cho mọi thư mục con.

chèn URL

Việc thêm url vào trong file TeX, sẽ được đơn giản nếu bạn bao lại với \url{…}, dùng package breakurl.

Ví dụ:

\url{https://vietnamen.wordpress.com}

Footnote

Nếu ai đã làm việc với \footnote{} rồi sẽ thấy là việc biên dịch hay có nhiều lỗi. Việc dùng \protect\footnote{} không phải là một giải pháp được khuyến khích. Để giải quyết, ta dùng package footmisc với option là stable.

\usepackage[stable]{footmisc}

ConTeXt

http://wiki.contextgarden.net/ConTeXt_and_emacs-muse

http://mwolson.org/projects/EmacsMuse.html

Search TeX styles

Có thể để các file style vào trong cùng 1 thư mục để dễ lưu trữ, giảm tiêu tốn bộ nhớ vì phải tạo các bản sao. Giải pháp dùng TEXINPUTS đã lỗi thời, cụ thể là chỉnh nội dung file ~/.bashrc

# Include shared LaTeX classes and BibTeX files in path, if LaTeX folder exists
if [ -d "~/latex" ]; then
    export TEXINPUTS=".:~/latex/:"
fi

Cách tốt hơn và chắc chắn làm việc là như sau.
  1. Tạo thư mục ~/texmf/tex/latex
  2. Copy các latex styles (e.g. breakurl, fancyvrb…) vào trong đó. Các styles này có thể download từ CTAN. Mỗi style có thể là 1 thư mục riêng để  giúp chúng độc lập nhau
  3. Di chuyển vào thư mục ~/texmf/tex/latex, tại đó type: texhash .
  4. Thành công
NOTE: Một số tiện ích hữu hiệu khác là kpsepath, kpsewhich, texconfig
e.g. texconfig conf

References:

  1. http://www.gemberdesign.com/2009/10/22/latex-and-bibtex-search-path/
  2. http://tug.ctan.org/tex-archive/macros/latex/contrib/breakurl/

Các lỗi khi biên dịch

Các lỗi gặp phải trong quá trình biên dịch

LaTeX Warning: Command \r invalid in math mode on input line xx

Tìm các file có \AA nằm trong phần math mode, sửa lại thành \text{\AA} hoặc đưa \AA ra khỏi math mode.

References:

  1. http://www.latex-community.org/forum/viewtopic.php?f=5&t=1893
  2. http://www.latex-community.org/forum/

ERROR: Argument of \hc@@caption has an extra }

Giải pháp đơn giản là chèn thêm cậu lệnh an toàn \protect vào ngay phía trước. References:
  1. http://www.tex.ac.uk/cgi-bin/texfaq2html?label=extrabrace
  2. http://www.tex.ac.uk/cgi-bin/texfaq2html?label=ftnsect
  3. http://www.gemberdesign.com/2009/10/22/latex-and-bibtex-search-path/
Advertisements

Written by vietnamen

Tháng Tư 29, 2009 at 9:31 chiều

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 at 10:39 sáng

Sử dụng hiệu quả Emacs

leave a comment »

Để xem thông tin về cách cài đặt Emacs, đọc Editors. Sau đây là một vài bổ sung về các chức năng tuyệt vời của Emacs khi khuôn khổ bài viết trên quá dài.

LaTeX

Xin xem bài viết về LaTeX.

References:

  1. http://www.phys.uu.nl/~haque/latexemacs.html
  2. http://www.gentoo-wiki.info/LaTeX

Emacs Code browser

ECB giúp viết codes lập trình đơn giản hơn với emacs. Xin xem bài viết ECB.

References:

  1. http://ecb.sourceforge.net/

R statistic language

ESS giúp soạn thảo và chạy các script viết cho ngôn ngữ thống kê R.

sudo apt-get install ess

To use inside emacs: M-x R

hoặc M-x S (với S-Plus)

Make sure these lines are in ~/.emacs

; automatically get the correct mode
auto-mode-alist (append (list '("\\.c$" . c-mode)
			      '("\\.tex$" . latex-mode)
			      '("\\.S$" . S-mode)
			      '("\\.s$" . S-mode)
			      '("\\.R$" . R-mode)
			      '("\\.r$" . R-mode)
			      '("\\.html$" . html-mode)
                              '("\\.emacs" . emacs-lisp-mode)
	                )
		      auto-mode-alist)
; comment out the following if you are not using R/S-Plus on ACPUB
; add a ";" in front of each line
(load "/usr/pkg/ess/lisp/ess-site")
(setq-default inferior-S+6-program-name "Splus")
(setq-default inferior-R-program-name "R")
Chú ý: Extensions for R mode end in .R or .r by default; for S use .S or .s as a file suffix

Một số phím tắt:

  • Esc-p Previous Command (at command line)
  • Esc-n Next Command (at command line)
  • C-c C-v Get help on R/S object (enter name in
  • C-c C-d Dump object or function to a Emacs buffer for editing
  • C-c C-l Load file from buffer into R
  • C-c C-f submit a Function in current buffer to R
  • C-c C-j submit the current line in buffer to R
  • C-c C-r submit the highlignted or marked region to R
  • C-c TAB complete object/file name
  • C-h m for help on ESS mode
  • More help is available under the iESS menu in emacs:
    • about (Emacs Info system for on-line help for ESS)
    • describe (for Control/Escape sequences and definitions for ESS)

References:

  1. http://ess.r-project.org/Manual/ess.html
  2. http://www.stat.duke.edu/courses/Spring04/sta244/computing/R-ESS.html

VC – local version control

VC đóng vai trò làm trung gian để quản lí version/source thông qua 1 trong các hệ thống RCS CVS SVN SCCS Arch MCVS.

Sau đó, chỉ việc dùng theo các keybinding sau

C-x vv  = check in/check out

Khi nào bạn check-in, nó sẽ hiện ra một buffer cho bạn gõ vào các thông tin gợi nhớ về lần cập nhật này (ví dụ: tại sao cập nhật, đã sửa bug nào rồi, ai sửa…)

C-x cc = kết thúc việc nhập message

C-x vc

C-x vu

M-x vc-<TAB>  (để liệt kê ra các lệnh của version control nếu ta quên phím tắt)

References:

  1. http://docstore.mik.ua/orelly/perl/sysadmin/appa_01.htm
  2. http://agave.garden.org/~aaronh/rcs/manual/gnu_emacs/rcs_1.html
  3. http://www.gnu.org/software/emacs/manual/html_node/emacs/General-VC-Options.html#General-VC-Options

RCS – Revision control system

Ngoài việc dùng SVN, ta có thể dùng một tiện ích nhỏ gọn và tiện lợi cho emacs, đó là rcs. RCS đơn giản vì 1 file chỉ cho phép có tối đa 1 người chỉnh sửatại 1 thời điểm.

sudo apt-get install rcs

Cấu hình

Keybinding Description
C-h t Start the tutorial.
C-h i m emacs RET Read the EmacsManual.
C-h m, C-h b Describe the current major mode.
M-x customize group RET foo RET Configure handling of .foo files.
C-h c, C-h k What does this key do?
C-h f What does this function do?
C-h v What does this variable do?
C-h a Search for commands by regexp.
M-x customize apropos Search for options by regexp.
M-: Prompt for expression.
M-x load-file RET ~/.emacs RET Reload .emacs without restarting.

Một số packages nên cài đặt: auctex, haskell-mode, lgrind

References:

  1. http://www.emacswiki.org/emacs/EmacsChannelFaq

TabMode

Một tính năng ưu việt mà tôi mới được biết là tab-browsing. Đây là một tính năng mới mà các webbrowsers mới có gần đây. Emacs cũng hỗ trợ chức năng này với tabbar mode.

GNU Emacs phiên bản mới đã tích hợp sẵn, ta chỉ việc add nội dung sau vào ~/.emacs

(require ‘tabbar)
(tabbar-mode) ;comment out this line to start without the tab on top
(global-set-key [(control shift h)] ‘tabbar-mode)
(global-set-key [(control shift up)] ‘tabbar-backward-group)
(global-set-key [(control shift down)] ‘tabbar-forward-group)
(global-set-key [(control shift left)] ‘tabbar-backward)
(global-set-key [(control shift right)] ‘tabbar-forward)
(global-set-key [(control next)] ‘tabbar-forward-tab)
(global-set-key [(control prior)] ‘tabbar-backward-tab)

Sau đó, load lại file cấu hình: M-x load-file <RET> ~/.emacs

Ở phía trên sẽ hiện ra các tab. Điểm hay ở đây là các buffer sẽ được phân loại ra theo major mode. Ví dụ: các files ở Latex-mode sẽ được hiện ra cùng với nhau theo một group.

– Để di chuyển qua lại giữa các group: Ctrl-Shift-Up or Ctrl-Shift-down

– Để di chuyển qua lại giữa các tab trong cùng 1 group: Ctrl-Shift-left   or Ctrl-Shift-right

References:

  1. http://www-cdf.fnal.gov/~sthrlnd/emacs_help.html
  2. http://www.emacswiki.org/emacs/TabBarMode

Written by vietnamen

Tháng Hai 18, 2009 at 9:55 chiều