%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Contents: Customising LaTeX output
% $Id: custom.tex,v 1.1.1.1 2002/02/26 10:04:20 oetiker Exp $
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Tuỳ biến các thành phần của \LaTeX{}}

\begin{intro}
Với các lệnh đã học từ chương 1 đến nay, bạn đã có thể soạn thảo được các tài liệu đẹp mắt, có tình chuyên nghiệp khá cao. Dù chúng chưa đạt đến được sự tinh xảo cao nhưng tài liệu của bạn đã tuân theo những qui tắc định dạng chung do đó chúng rất dễ đọc và có tính chất chuyên nghiệp.

Tuy nhiên, trên thực tế của việc soạn thảo với \LaTeX{}, bạn vẫn còn gặp phải một số tình huống mà \LaTeX{} không cung cấp các lệnh hay môi trường phù hợp với yêu cầu của bạn hay kết quả có được từ các lệnh sẵn có không làm cho bạn hài lòng.

Trong chương này, chúng ta sẽ cùng tìm hiểu một vài thủ thuật để ``dạy'' cho \LaTeX{} những kỹ năng mới nhằm tạo ra các tài liệu có kiểu mẫu khác với các kiểu mẫu mặc định.
\end{intro}


\section{Tạo lệnh, gói lệnh và môi trường mới}
Nếu chú ý thì bạn sẽ thấy rằng tất cả các lệnh trong tài liệu này đều được đóng khung và bạn có thể dễ dàng tìm thấy chúng trong phần chỉ mục của tài liệu. Thay vì trực tiếp sử dụng các lệnh của \LaTeX{}, tôi đã tạo ra một \wi{gói} mới định nghĩa cách các lệnh và môi trường mới này. Khi này, tôi chỉ cần nhập vào như sau:

\begin{example}
\begin{lscommand}
\ci{dum}
\end{lscommand}
\end{example}
Trong ví dụ này, tôi đã sử dụng một môi trường mới gọi là \ei{lscommand} và một lệnh mới là \ci{ci}. Môi trường mới này sẽ
vẽ đóng khung các lệnh. Còn lệnh \ci{ci} được dùng để soạn thảo tên lệnh và đưa nó vào bảng chỉ mục. Bạn có thể kiểm tra điều này bằng cách nhìn qua mục \ci{dum} trong phần chỉ mục của tài liệu này.

Khi tôi muốn thay đổi định dạng cho các lệnh sang một kiểu khác (chẳng hạn như không đóng khung nữa), tôi chỉ cần thay đổi định nghĩa của môi trường \texttt{lscommand}. Điều này giúp cho việc thay đổi được thực hiện khá dễ dàng mà không cần phải tìm kiếm trong suốt tài liệu và tiến hành sửa đổi.

\subsection{Tạo lệnh mới}
Để thêm vào một lệnh mới của riêng bạn, sử dụng lệnh sau:

\begin{lscommand}
\ci{newcommand}\verb|{|%
       \emph{name}\verb|}[|\emph{num}\verb|]{|\emph{definition}\verb|}|
\end{lscommand}
\noindent Thông thường, một lệnh sẽ đòi hỏi hai tham số: \emph{name} là tên của lệnh mà bạn muốn tạo và \emph{definition} là định nghĩa của lệnh. Tham số \emph{num} trong dấu ngoặc vuông là tuỳ chọn và xác định số các tham số mà lệnh mới cần đến (một lệnh có khả năng có tối đa là 9 tham số). Nếu ta bỏ qua tham số này thì lệnh này sẽ được gọi mà không có tham số nào cả.

Dưới đây là một ví dụ nhằm giúp bạn hiểu rõ hơn. Trong ví dụ này, trước tiên, ta sẽ tạo ra một lệnh mới gọi là \ci{tnss}. Lệnh này sẽ xuất ra chuỗi ``The Not So Short Introduction to \LaTeXe{}.''

\begin{example}
\newcommand{\tnss}{The not
    so Short Introduction to
    \LaTeXe}
Đây là tựa đề gốc của tài
liệu này: ``\tnss'' \ldots{}
``\tnss''
\end{example}
Ví dụ tiếp theo sẽ minh hoạ cho việc tạo lệnh mới và lệnh này sẽ có 1 tham số. Thẻ lệnh \verb|#1| sẽ được thay thế bởi nội dung do bạn cung cấp. Nếu bạn muốn có nhiều hơn 1 tham số, bạn có thể sử dụng thẻ lệnh \verb|#2|, \ldots.

\begin{example}
\newcommand{\txsit}[1]
 {Xin chào
 \emph{#1}. Chúc một ngày tốt lành!}
% trong phần thân của tài liệu:
\begin{itemize}
\item \txsit{Nguyễn Tân Khoa}
\item \txsit{Babymilky}
\end{itemize}
\end{example}
\LaTeX{} không cho phép việc tạo ra các lệnh mới trùng tên với các lệnh sẵn có. Tuy nhiên, trong trường hợp này, bạn có thể dùng lệnh sau: \ci{renewcommand} một cách tường minh. Lệnh \verb|renewcommand| cũng có cú pháp tương tự như lệnh \verb|\newcommand|.

Trong một số trường hợp cụ thể, bạn có thể sử dụng lệnh \ci{providecommand}. Lệnh này giống như lệnh \ci{newcommand} nhưng khi mà lệnh đã được định nghĩa thì \LaTeXe{} sẽ tự động bỏ qua nó.

Xem thêm trang \pageref{khoảng trắng} để biết thêm chi tiết về các vấn đề liên quan đến khoảng trắng ở sau một lệnh.

\subsection{Tạo môi trường mới}
Cũng như lệnh \verb|\newcommand|, có một lệnh hỗ trợ cho việc tạo ra các môi trường mới. Đó là lệnh \ci{newenvironment} với cú pháp như sau:

\begin{lscommand}
\ci{newenvironment}\verb|{|%
       \emph{name}\verb|}[|\emph{num}\verb|]{|%
       \emph{before}\verb|}{|\emph{after}\verb|}|
\end{lscommand}
Tương tự như lệnh \ci{newcommand}, lệnh \ci{newenvironment} cũng có các tham số tuỳ chọn riêng. Dữ liệu trong phần \emph{before} sẽ được xử lý trước khi phần văn bản được xử lý và dữ liệu trong phần \emph{after} sẽ được xử lý khi lệnh
\verb|\end{|\emph{name}\verb|}| được xử lý.

Dưới đây là một ví dụ minh hoạ cho việc sử dụng lệnh \ci{newenvironment}.

\begin{example}
\newenvironment{king}
 {\rule{1ex}{1ex}%
      \hspace{\stretch{1}}}
 {\hspace{\stretch{1}}%
      \rule{1ex}{1ex}}

\begin{king}
Đề tài bé nhỏ của tôi \ldots
\end{king}
\end{example}
Tham số \emph{num} sẽ cho biết số đối số của lệnh. \LaTeX{} sẽ kiểm tra xem bạn có định nghĩa lại một môi trường đã tồn tại hay không. Khi này, nếu bạn muốn thay đổi một môi trường đã tồn tại, bạn có thể sử dụng lệnh \ci{renewenvironment}. Cú pháp của lệnh này cũng tương tự như cú pháp của lệnh \ci{renewcommand}.

Các lệnh được sử dụng trong ví dụ trên sẽ được giải thích sau. Đối với các lệnh \ci{rule} và \ci{stretch}, bạn có thể tham khảo thêm ở trang~\pageref{cmd:rule} và~\pageref{sec:rule}. Còn với lệnh \ci{hspace} thì xem thêm ở trang~\pageref{sec:hspace}

\subsection{Tạo một gói lệnh mới}
Khi mà bạn đã định nghĩa nhiều môi trường và nhiều lệnh mới, phần tựa đề của tài liệu của bạn sẽ trở nên khá dài. Do đó, bạn nên tạo một gói mới chứa định nghĩa của tất cả các lệnh và môi trường mới này. Sau đó, bạn có thể sử dụng lệnh \ci{usepackage} để đưa gói mới này vào sử dụng trong tài liệu của bạn.

\begin{figure}[!htbp]
\begin{lined}{\textwidth}
\begin{verbatim}
% Demo Package by Tobias Oetiker
\ProvidesPackage{demopack}
\newcommand{\tnss}{The not so Short Introduction to \LaTeXe}
\newcommand{\txsit}[1]{The \emph{#1} Short
                       Introduction to \LaTeXe}
\newenvironment{king}{\begin{quote}}{\end{quote}}
\end{verbatim}
\end{lined}
\caption{Ví dụ về một gói lệnh tự tạo.} \label{package}
\end{figure}
Việc viết một gói lệnh mới bao gồm việc sao chép nội dung của phần tựa đề của tài liệu vào một tập tin riêng lẻ với phần mở rộng là \texttt{.sty}. Có một lệnh đặc biệt:
\begin{lscommand}
\ci{ProvidesPackage}\verb|{|\emph{package name}\verb|}|
\end{lscommand}
\noindent để sử dụng ở đầu của tập tin lưu gói lệnh. Lệnh \verb|\ProvidePackage| cho \LaTeX{} biết tên của gói lệnh; đồng
thời, nó cũng cho phép \LaTeX{} thông báo các lỗi cơ bản như việc đưa gói lệnh vào hai lần. Hình~\ref{package} cho thấy một ví dụ nhỏ về gói lệnh tự tạo chứa các lệnh đã được định nghĩa trong các ví dụ trên.

\section{Font chữ và kích thước font chữ}

\subsection{Các lệnh thay đổi font chữ}
\index{font}\index{kích thước font chữ} \LaTeX{} sẽ tự động lựa chọn font chữ và kích thước font chữ dựa trên cấu trúc logic của tài liệu (mục, chú thích chân, \ldots). Trong một số tình huống, bạn sẽ muốn tự thay đổi font chữ. Để thực hiện điều này, bạn có thể sử dụng các lệnh trong bảng~\ref{fonts} và~\ref{sizes}. Kích thước phù hợp của font chữ là một kĩ thuật thiết kế dựa trên kiểu tài liệu và các mục chọn của nó. Bảng~\ref{tab:pointsizes} liệt kê các kích thước tương ứng cho các lệnh thay đổi kích thước font chữ trong các lớp tài liệu chuẩn.

\begin{example}
{\small Chữ nhỏ \textbf{bold}
dạng Romans} {\Large Chữ lớn
\textit{Italy}.}
\end{example}
Một tính năng quan trọng của \LaTeXe{} là các thuộc tính của font chữ là độc lập. Điều này có nghĩa là bạn có thể thay đổi  font chữ hay kích thước của font chữ mà vẫn giữa được các định dạng in đậm, in nghiêng đã được đặt từ trước.

Trong \emph{chế độ toán học}, bạn có thể dùng các lệnh thay đổi font chữ để tạm thời thoát ra khỏi \emph{chế độ toán học} và nhập vào các đoạn văn bản thông thường. Để thay đổi font chữ trong chế độ toán học, bạn cần sử dụng một tập lệnh đặc biệt. Xem thêm bảng~\ref{mathfonts}.

\begin{table}[!bp]
\caption{Font chữ.} \label{fonts}
\begin{lined}{13cm}
%
% Alan suggested not to tell about the other form of the command
% eg \verb|\sffamily| or \verb|\bfseries|. This seems a good thing to me.
%
\begin{tabular}{@{}rl@{\qquad}rl@{}}
\fni{textrm}\verb|{...}|        &      \textrm{\wi{roman}}&
\fni{textsf}\verb|{...}|        &      \textsf{\wi{sans serif}}\\
\fni{texttt}\verb|{...}|        &      \texttt{đánh máy}\\[6pt]
\fni{textmd}\verb|{...}|        &      \textmd{trung bình}&
\fni{textbf}\verb|{...}|        &      \textbf{\wi{in đậm}}\\[6pt]
\fni{textup}\verb|{...}|        &       \textup{\wi{thắng đứng}}&
\fni{textit}\verb|{...}|        &       \textit{\wi{in nghiêng}}\\
\fni{textsl}\verb|{...}|        &       \textsl{\wi{nghiêng}}&
\fni{textsc}\verb|{...}|        &       \textsc{\wi{chữ nhỏ}}\\[6pt]
\ci{emph}\verb|{...}|          &            \emph{nhấn mạnh} &
\fni{textnormal}\verb|{...}|    &    font chữ \textnormal{bình
thường}
\end{tabular}

\bigskip
\end{lined}
\end{table}


\begin{table}[!bp]
\index{font size} \caption{Kích thước của font chữ.} \label{sizes}
\begin{lined}{12cm}
\begin{tabular}{@{}ll}
\fni{tiny}      & \tiny        font chữ nhỏ \\
\fni{scriptsize}   & \scriptsize  font chữ rất nhỏ\\
\fni{footnotesize} & \footnotesize  font chữ tương đối nhỏ \\
\fni{small}        &  \small            font chữ nhỏ \\
\fni{normalsize}   &  \normalsize  font chữ thường \\
\fni{large}        &  \large       font chữ lớn
\end{tabular}%
\qquad\begin{tabular}{ll@{}}
\fni{Large}        &  \Large       font chữ lớn hơn \\[5pt]
\fni{LARGE}        &  \LARGE       font chữ rất lớn \\[5pt]
\fni{huge}         &  \huge        font chữ ``khổng lồ'' \\[5pt]
\fni{Huge}         &  \Huge        font chữ lớn nhất
\end{tabular}

\bigskip
\end{lined}
\end{table}

\begin{table}[!tbp]
\caption{Kích thước tính theo điểm (pt) của các tài liệu
chuẩn.}\label{tab:pointsizes} \label{tab:sizes}
\begin{lined}{13cm}
\begin{tabular}{lrrr}
\multicolumn{1}{c}{Cỡ} & \multicolumn{1}{c}{10pt (mặc định) } &
           \multicolumn{1}{c}{11pt tuỳ chọn}  &
           \multicolumn{1}{c}{12pt tuỳ chọn}\\
\verb|\tiny|       & 5pt  & 6pt & 6pt\\
\verb|\scriptsize| & 7pt  & 8pt & 8pt\\
\verb|\footnotesize| & 8pt & 9pt & 10pt \\
\verb|\small|        & 9pt & 10pt & 11pt \\
\verb|\normalsize| & 10pt & 11pt & 12pt \\
\verb|\large|      & 12pt & 12pt & 14pt \\
\verb|\Large|      & 14pt & 14pt & 17pt \\
\verb|\LARGE|      & 17pt & 17pt & 20pt\\
\verb|\huge|       & 20pt & 20pt & 25pt\\
\verb|\Huge|       & 25pt & 25pt & 25pt\\
\end{tabular}

\bigskip
\end{lined}
\end{table}


\begin{table}[!bp]
\caption{Các font chữ để soạn thảo trong chế độ toán học.}
\label{mathfonts}
\begin{lined}{\textwidth}
\begin{tabular}{@{}lll@{}}
\textit{Lệnh}&\textit{Ví dụ}&    \textit{Kết quả}\\[6pt]
\fni{mathcal}\verb|{...}|&    \verb|$\mathcal{B}=c$|&     $\mathcal{B}=c$\\
\fni{mathrm}\verb|{...}|&     \verb|$\mathrm{K}_2$|&      $\mathrm{K}_2$\\
\fni{mathbf}\verb|{...}|&     \verb|$\sum x=\mathbf{v}$|& $\sum x=\mathbf{v}$\\
\fni{mathsf}\verb|{...}|&     \verb|$\mathsf{G\times R}$|&        $\mathsf{G\times R}$\\
\fni{mathtt}\verb|{...}|&     \verb|$\mathtt{L}(b,c)$|&   $\mathtt{L}(b,c)$\\
\fni{mathnormal}\verb|{...}|& \verb|$\mathnormal{R_{19}}\neq R_{19}$|&
$\mathnormal{R_{19}}\neq R_{19}$\\
\fni{mathit}\verb|{...}|&     \verb|$\mathit{ffi}\neq ffi$|& $\mathit{ffi}\neq ffi$
\end{tabular}

\bigskip
\end{lined}
\end{table}

Liên quan đến các lệnh thay đổi kích thước font chữ, \wi{dấu ngoặc
vuông} đóng một vai trò rất quan trọng. Chúng được dùng để tạo ra
các \emph{nhóm}. Các \emph{nhóm} sẽ giới hạn phạm vi tác dụng của
các lệnh trong \LaTeX{}.\index{nhóm}.

\begin{example}
Tôi thích {\LARGE Toán-Tin học
và {\small Văn học}}.
\end{example}
Các lệnh liên quan đến kích thước của font chữ cũng sẽ thay đổi
khoảng cách giữa các hàng khi mà một đoạn văn kết thúc bên trong
phạm vi tác dụng của lệnh này. Do đó, dấu đóng ngoặc \verb|}|
không nên xuất hiện trước khi kết thúc đoạn văn. Hãy chú ý đến vị
trí của lệnh \ci{par} trong hai ví dụ sau
đây.\footnote{\texttt{\bs{}par} tương đương với một hàng trắng.}

\begin{example}
{\Large Đừng tin cô gái ấy.
Tôi nói ``thiệt'' đấy!!!\par}
\end{example}

\begin{example}
{\Large Đừng tin chàng trai ấy.
Tôi không ``quan tâm'' đến anh
ta.}\par
\end{example}
Khi bạn muốn kích hoạt việc thay đổi kích thước font chữ cho cả
doạn văn bản hay nhiều hơn, bạn có thể sử dụng môi trường lệnh để
thay đổi.
\begin{example}
\begin{Large}
Đừng tin những gì con
gái nói. Nhưng như vậy
thì còn biết tin vào
gì nữa đây???!!! \ldots
\end{Large}
\end{example}

\noindent Giải pháp này sẽ giúp bạn tránh được việc nhập thiếu dấu
đóng ngoặc \verb|}|.

\subsection{Lưu ý khi sử dụng các lệnh thay đổi định dạng}
Như đã nói đến ở đầu chương, việc thay đổi định dạng của font chữ,
kích thước thông qua các lệnh tác động trực tiếp sẽ làm cho tài
liệu của chúng ta trở nên không còn trong sáng như ý tưởng ban
đầu. Do đó, khi cần thay đổi định dạng của văn bản tại nhiều nơi
trong văn bản, bạn nên tạo ra một lệnh mới với lệnh
\verb|\newcommand|.

\begin{example}
\newcommand{\oops}[1]{\textbf{#1}}
Đừng \oops{bước vào} căn
phòng này!! Bên trong căn
phòng này đang
có một \oops{con vật lạ}
từ hành tinh khác!.
\end{example}
Hướng tiếp cận này có những lợi điểm riêng bởi vì bạn có thể thay
đổi cách định dạng về sau với rất ít công sức. Ngược lại, nếu bạn
sử dụng lệnh thay đổi trực tiếp như \verb|\textbf| thì khi muốn
thay đổi định dạng, bạn cần phải tìm kiếm tất cả các lệnh
\verb|\textbf| trong tài liệu và thay thế nó bởi lệnh định dạng
khác. Hãy nghĩ đến sự phức tạp khi mà bạn muốn thay đổi một loạt
các định dạng phức tạp!!!

\subsection{Vài lời khuyên}
Để kết thúc phần giới thiệu về font chữ và kích thước của font
chữ, dưới đây là một số lời khuyên:\nopagebreak

\begin{quote}
  \underline{\textbf{Hãy nhớ là\Huge!}} \textit{Sử dụng}
  \textsf{nhiều\textbf{\LARGE FONT} \texttt{chữ}\textsl{khác nhau}} \Huge
  Bạn \tiny sẽ \footnotesize \textbf{tạo} ra \small \texttt{một tài liệu đẹp},
  \large \textit{và} \normalsize dễ \textsc{đọc}.
\end{quote}

\section{Các khoảng trắng}

\subsection{Khoảng cách giữa cách hàng}

\index{khoảng trắng giữa các hàng} Bạn có thể thay đổi khoảng cách
giữa các hàng bên trong một tài liệu với lệnh sau:
\begin{lscommand}
\ci{linespread}\verb|{|\emph{factor}\verb|}|
\end{lscommand}
\noindent ở phần tựa đề của tài liệu. Lệnh \verb|\linespread{1.3}|
xác định khoảng cách giữa các hàng là ``một rưỡi''; lệnh
\verb|\linespread{1.6}| xác định khoảng cách giữa các hàng là
``gấp đôi''. Bình thường thì khoảng cách giữa các hàng không được
căng ra cho nên khoảng cách mặc định là~1.\index{khoảng cách hàng
kép}.

\subsection{Định dạng đoạn văn}\label{parsp}
Trong \LaTeX{}, có hai tham số ảnh hưởng đến việc trình bày các
đoạn văn. Thông qua các lệnh sau

\begin{code}
\ci{setlength}\verb|{|\ci{parindent}\verb|}{0pt}| \\
\verb|\setlength{|\ci{parskip}\verb|}{1ex plus 0.5ex minus 0.2ex}|
\end{code}
trong phần tựa đề của tập tin dữ liệu vào, bạn có thể thay đổi
cách trình bày các đoạn văn. Hai lệnh này sẽ tăng khoảng cách giữa
các đoạn văn trong khi thiết lập việc canh lề các đoạn văn là 0.

Phần tham số \texttt{plus} và \texttt{minus} của lệnh trên sẽ cho
\TeX{} biết rằng nó có thể co hẹp lại hay dãn rộng ra việc cách
đoạn theo một lượng được xác định khi mà đoạn văn tương ứng cần
phải nằm vừa vặn trong một trang.

Theo định dạng văn bản thông thường ở châu Âu, các đoạn văn thường
cách nhau bởi một khoảng trắng và không được canh lề. Nhưng bạn
nên lưu ý rằng, cách định dạng này cũng có những ảnh hưởng riêng
đến bảng mục lục: khoảng cách giữa các hàng sẽ tương đối lớn làm
cho bảng mục lục trở nên ``lỏng lẽo''. Để tránh điều này, bạn có
thể đặt hai lệnh định dạng khoảng cách ở trong phần tựa đề vào
phần nội dung của tài liệu, ở sau lệnh \verb|\tableofcontent| hoặc
bạn có thể không sử dụng hai lệnh định dạng trên. Hầu hết các tài
liệu chuyên nghiệp đều sử dụng định dạng đoạn văn bằng cách canh
lề chứ không dùng khoảng trắng để cách đoạn.

Để canh lề một đoạn văn chưa được canh lề, hãy sử dụng lệnh sau:

\begin{lscommand}
\ci{indent}
\end{lscommand}
\noindent ở phần đầu của đoạn văn.\footnote{Để canh lề cho đoạn
văn đầu tiên nằm ở sau tựa đề mục, bạn có thể sử dụng gói
\pai{indentfirst} trong bộ các công cụ}. Hiển là lệnh này sẽ không
có tác động khi lệnh \verb|\parindent| được chỉnh là 0.

Để chỉnh cho đoạn văn không được canh lề, bạn có thể sử dụng lệnh
sau:

\begin{lscommand}
\ci{noindent}
\end{lscommand}
\noindent ở vị trí đầu tiên của đoạn văn. Lệnh này rất có ích khi
bạn bắt đầu một tài liệu bằng phần văn bản chứ không phải lệnh tạo
đề mục.

\subsection{Khoảng trắng ngang}
\label{sec:hspace} \LaTeX{} tác động xác định khoảng trắng giữa
các từ và các câu một cách tự động. Để thêm vào khoảng trắng
ngang, bạn có thể dùng lệnh:\index{khoảng trắng!ngang}

\begin{lscommand}
\ci{hspace}\verb|{|\emph{length}\verb|}|
\end{lscommand}
Trong tình huống bạn muốn giữ nguyên các khoảng trắng này tại vị
trí cuối hàng hoặc đầu hàng, bạn có thể sử dụng lệnh
\verb|\hspace*| thay cho lệnh \verb|\hspace|. Tham số
\emph{length} chỉ đơn thuần là một con số và đơn vị đo tương ứng
(trong tình huống đơn giản nhất). Các đơn vị thường dùng được liệt
kê trong bảng~\ref{units}.\index{đơn vị}\index{kích thước}.

\begin{example}
Đây là một khoảng
trắng dài \hspace{1.5cm}
 1.5 cm.
\end{example}
\suppressfloats
\begin{table}[tbp]
\caption{Các đơn vị trong \TeX{}.} \label{units}\index{units}
\begin{lined}{9.5cm}
\begin{tabular}{@{}ll@{}}
\texttt{mm} & millimetre $\approx 1/25$~inch \quad \demowidth{1mm} \\
\texttt{cm} & centimetre = 10~mm  \quad \demowidth{1cm}                     \\
\texttt{in} & inch $=$ 25.4~mm \quad \demowidth{1in}                    \\
\texttt{pt} & điểm $\approx 1/72$~inch $\approx \frac{1}{3}$~mm  \quad\demowidth{1pt}\\
\texttt{em} & xấp xỉ chiều rộng của chữ `M' trong font chữ hiện thời \quad \demowidth{1em}\\
\texttt{ex} & xấp xỉ chiều cao của chữ `x' trong font chữ hiện
thời \quad \demowidth{1ex}
\end{tabular}

\bigskip
\end{lined}
\end{table}

\label{cmd:stretch} Lệnh
\begin{lscommand}
\ci{stretch}\verb|{|\emph{n}\verb|}|
\end{lscommand}
\noindent sẽ tạo ra các khoảng trắng đặc biệt. Nó sẽ dãn ra cho
đến khi nó sử dụng hết tất cả các khoảng trắng trên hàng. Nếu hai
lệnh \verb|\hspace{\stretch{|\emph{n}\verb|}}| xuất hiện trên cùng
một hàng thì việc dãn rộng các khoảng trắng sẽ được quyết định dựa
trên tham số \emph{n}.

\begin{example}
x\hspace{\stretch{1}}
x\hspace{\stretch{3}}x
\end{example}

When using horizontal space together with text, it may make sense to make
the space adjust its size relative to the size of the current font.
This can be done by using the text-relative units \texttt{em} and
\texttt{en}:

\begin{example}
{\Large{}big\hspace{1em}y}\\
{\tiny{}tin\hspace{1em}y}
\end{example}

\subsection{Khoảng trắng dọc}
Khoảng cách giữa các đoạn văn, mục, mục con, \ldots\ được xác định
một cách tự động bởi \LaTeX{}. Khi cần thiết, các khoảng trắng dọc
\emph{giữa hai đoạn văn} có thể được thêm vào với lệnh sau:

\begin{lscommand}
\ci{vspace}\verb|{|\emph{length}\verb|}|
\end{lscommand}
Lệnh này nên được sử dụng giữa hai hàng trắng. Khi cần giữ khoảng
trắng ở đầu hay cuối trang, bạn có thể sử dụng lệnh
\verb|\vspace*| thay cho lệnh \verb|\vspace|.\index{khoảng
trắng!dọc}.

Lệnh \verb|\stretch| cùng với lệnh \verb|\pagebreak| có thể được
sử dụng để soạn thảo phần văn bản ở hàng cuối cùng của một trang
hay canh giữa văn bản theo chiều dọc của trang giấy.
\begin{code}
\begin{verbatim}
Một vài lưu ý \ldots

\vspace{\stretch{1}}
Đây sẽ là hàng cuối của trang.\pagebreak
\end{verbatim}
\end{code}

Lệnh sau sẽ cho phép bạn thay đổi khoảng cách giữa các hàng trong
cùng một đoạn văn hay trong cùng một biểu bảng:

\begin{lscommand}
\ci{\bs}\verb|[|\emph{length}\verb|]|
\end{lscommand}
Với lệnh \ci{bigskip} và \ci{smallskip}, bạn có thể cách quãng một
khoảng cách định trước theo chiều dọc.

\section{Trình bày trang}
\begin{figure}[!hp]
\begin{center}
\makeatletter\@layout\makeatother
\end{center}
\vspace*{1.8cm} \caption{Các tham số trong việc trình bày trang.}
\label{fig:layout}
\end{figure}
\index{trình bày trang}

\LaTeXe{} cho phép bạn xác định kích thước trang giấy trong lệnh \\
\verb|\documentclass|. Sau khi được cung cấp kích thước giấy,
\LaTeX{} sẽ tự động xác định kích thước các biên. Tuy nhiên, đôi
khi thao tác tự động này không đáp ứng được yêu cầu định dạng của
bạn. Và với \LaTeX{}, bạn hoàn toàn có khả năng tuỳ biến điều này
cho phù hợp với yêu cầu công việc.\thispagestyle{fancyplain}.
Hình~\ref{fig:layout} sẽ cung cấp cho bạn một cái nhìn tổng quát
về các tham số có thể thay đổi nhằm thực hiện việc định dạng theo
yêu cầu.%
\footnote{\texttt{CTAN:/tex-archive/macros/latex/required/tools}}

Tuy nhiên, bạn cần phải \textbf{cẩn thận} trước khi quyết định
việc thay đổi định dạng. Bản thân \LaTeX{} đã cố gắng lựa chọn cho
bạn những mẫu định dạng mang tính chất chuyên nghiệp và tương đối
chuẩn trong soạn thảo tài liệu. Do đó, đôi khi việc tuỳ biến các
định dạng này sẽ cho các bạn một kết quả ngoài dự kiến (thông
thường thì kết quả sẽ tệ hơn!!!).

Để bạn hiểu rõ hơn, ta bắt đầu đi vào phân tích vấn đề. Khi bạn tự
so sánh một trang tài liệu của mình với một trang tài liệu được
soạn thảo bằng MS Word, bạn sẽ thấy rằng trang tài liệu được soạn
bằng \LaTeX{} nhỏ hơn. Tuy nhiên, nếu bạn nhìn kĩ vào các quyển
sách đã được xuất bản\footnote{các quyển sách được in bởi các nhà
xuất bản danh tiếng.} và đếm số kí tự trên một hàng, bạn sẽ thấy
rằng mỗi hàng thường không chứ quá \emph{66} kí tự. Bây giờ, bạn
hãy tiến hành kiểm tra tài liệu được soạn thảo bằng \LaTeX{}, bạn
cũng sẽ có kết quả tương tự. Kinh nghiệm trong ngành in ấn đã cho
thấy rằng các hàng quá dài sẽ gây khó khăn cho người đọc, dễ làm
cho người đọc bị mỏi mắt (đây cũng là lý do vì sao mà các tờ báo
lại chọn cách in dạng nhiều cột).

Như vậy, nếu bạn tự ý tăng độ rộng của phần văn bản, bạn đã vô
tình gây khó khăn cho người đọc. Tuy nhiên, chúng ta vẫn giới
thiệu cho các bạn biết về các lệnh để thực hiện việc này (nhưng
bạn nên để \LaTeX{} tự động lựa chọn cách trình bày chuẩn nhất).

\LaTeX{} cung cấp 2 lệnh để thay đổi các tham số này. Thông
thường, các lệnh này thường được đặt trong phần tựa đề của tài
liệu.

Lệnh đầu tiên này sẽ gán một giá trị cố định cho một tham số bất
kỳ:

\begin{lscommand}
\ci{setlength}\verb|{|\emph{parameter}\verb|}{|\emph{length}\verb|}|
\end{lscommand}

Lệnh thứ hai này sẽ cộng thêm vào giá trị hiện tại của tham số:
\begin{lscommand}
\ci{addtolength}\verb|{|\emph{parameter}\verb|}{|\emph{length}\verb|}|
\end{lscommand}
Lệnh thứ hai này hữu ích hơn lệnh thứ nhất (\ci{setlength}) bởi vì
bạn có thể thao tác dựa trên các định dạng sẵn có. Để thêm vào vào
chiều rộng của phần nội dung 1cm, bạn thêm lệnh sau vào phần tựa
đề của tài liệu:
\begin{code}
\verb|\addtolength{\hoffset}{-0.5cm}|\\
\verb|\addtolength{\textwidth}{1cm}|
\end{code}
Trong tình huống này, bạn có thể xem thêm gói \pai{calc}. Gói này
sẽ cho phép bạn sử dụng các toán tử số học trong tham số của lệnh
\ci{setlength} và các vị trí khác khi bạn nhập giá trị vào tham số
của một hàm.

\section{Các vấn đề khác với việc định dạng chiều dài}
Khi có thể, tôi thường tránh việc sử dụng các chiều dài thuần tuý
trong các tài liệu được soạn thảo bởi \LaTeX{}. Thông thường, ta
nên dựa vào các tham số cơ bản như chiều dài, rộng của các phần tử
khác của một trang. Đối với chiều rộng của một hình minh họa, bạn
nên sử dụng lệnh \verb|\textwidth| để chỉnh cho hình minh họa nằm
trọn trong một trang.

3 lệnh dưới đây sẽ giúp bạn xác định chiều rộng, cao và sâu của
chuỗi văn bản.

\begin{lscommand}
\ci{settoheight}\verb|{|\emph{variable}\verb|}{|\emph{text}\verb|}|\\
\ci{settodepth}\verb|{|\emph{variable}\verb|}{|\emph{text}\verb|}|\\
\ci{settowidth}\verb|{|\emph{variable}\verb|}{|\emph{text}\verb|}|
\end{lscommand}

\noindent Ví dụ dưới đây cho thấy tác dụng của 3 lệnh trên.

\begin{example}
\flushleft
\newenvironment{vardesc}[1]{%
  \settowidth{\parindent}{#1:\ }
  \makebox[0pt][r]{#1:\ }}{}

\begin{displaymath}
a^2+b^2=c^2
\end{displaymath}

\begin{vardesc}{Với}$a$,
$b$ -- là hai cạnh kề của
góc vuông của tam giác vuông.

$c$ -- là cạnh huyền của
tam giác vuông.

$d$ -- chưa được đề cập ở đây!!!!
\end{vardesc}
\end{example}

\section{Các hộp}
\LaTeX{} xây dựng các trang bằng cách kết hợp các hộp. Đầu tiên,
mỗi kí tự là một hộp nhỏ. Chúng sẽ được gắn lại với nhau để tạo
nên các từ. Sau đó, các từ này lại được gắn lại với nhau để tạo ra
các từ khác. Tuy nhiên, với loại ``keo'' kết dính đặc biệt thì
chúng có thể co dãn được để có thể nằm trọn trên một hàng.

Đây chỉ là một cách nói nôm na cơ chế làm việc của \LaTeX{}. Không
chỉ các kí tự mới có thể được đóng hộp. Chúng ta có thể đặt hầu
hết mọi thứ vào trong một cái hộp (ngay cả một cái hộp khác). Khi
này, mỗi một hộp sẽ được \LaTeX{} xem như một kí tự đơn.

Trong các chương trước, chúng ta đã bắt gặp các hộp (bao quanh các
lệnh, \ldots). Môi trường \ei{tabular} và lệnh
\ci{includegraphics} sẽ hỗ trợ bạn tạo nên các hộp trong tài liệu.
Điều này có nghĩa là bạn có thể sắp xếp hai biểu bảng hay hình ảnh
kế bên nhau. Điều duy nhất bạn cần quan tâm ở đây là tổng chiều
rộng của hai đối tượng này không được vượt quá chiều rộng của văn
bản.

Ngoài ra, bạn cũng có thể đóng khung một đoạn văn với lệnh

\begin{lscommand}
\ci{parbox}\verb|[|\emph{pos}\verb|]{|\emph{width}\verb|}{|\emph{text}\verb|}|
\end{lscommand}

\noindent hay môi trường

\begin{lscommand}
\verb|\begin{|\ei{minipage}\verb|}[|\emph{pos}\verb|]{|\emph{width}\verb|}| text
\verb|\end{|\ei{minipage}\verb|}|
\end{lscommand}

\noindent Tham số \texttt{pos} có thể có các giá trị như
\texttt{c,t} hay \texttt{b} để canh lề hộp theo chiều dọc trong
mối quan hệ với vạch giới hạn xung quanh phần văn bản. Tham số
\texttt{width} sẽ xác định chiều rộng của hộp. Điểm khác biệt
chính giữa môi trường \ei{minipage} và lệnh \ci{parbox} là bạn
không thể sử dụng tất cả các lệnh và môi trường bên trong một hộp
được tạo bởi lệnh \ci{parbox}. Ngược lại, bạn có thể làm mọi việc
bên trong môi trường \ei{minipage}.

Trong khi lệnh \ci{parbox} đóng khung cả đoạn văn bản gồm cả việc
xuống hàng, \ldots ta có một lớp các lệnh đóng khung khác chỉ làm
việc với các văn bản được canh lề theo chiều ngang. Đó là lệnh
\ci{mbox}. Lệnh này chỉ đơn thuần xếp chặt một loạt các hộp vào
trong một hộp khác. Bạn có thể ngăn chặn việc \LaTeX{} tách rời 2
từ bằng cách sử dụng lệnh này. Lệnh này có tính linh hoạt rất cao.

\begin{lscommand}
\ci{makebox}\verb|[|\emph{width}\verb|][|\emph{pos}\verb|]{|\emph{text}\verb|}|
\end{lscommand}

\noindent Tham số \texttt{width} xác định độ rộng của
hộp.\footnote{Điều này có nghĩa là hộp có thể nhỏ hơn phần nội
dung bên trong. Bạn có thể chỉnh độ rộng của hộp là 0pt để phần
văn bản bên trong hộp được soạn thảo mà không bị ảnh hưởng bởi hộp
bao quanh.} Bên cạnh các tham số về độ dài, bạn có thể sử dụng các
lệnh \ci{width}, \ci{height}, \ci{depth} và \ci{totalheight} bên
trong biểu thức về độ dài. Các tham số này có thể được chỉnh dựa
trên các giá trị có được bằng cách đo độ rộng của phần văn bản
\texttt{text}. Tham số \emph{pos} lấy các giá trị sau: \textbf{c}:
văn bản sẽ được canh giữa, \textbf{l}: văn bản sẽ được dồn về
trái, \textbf{r}: văn bản sẽ được dồn về bên phải hay \textbf{s}:
văn bản sẽ được dàn trải ra trong hộp.

Lệnh \ci{framebox} hoạt động tương tự như lệnh \ci{makebox} nhưng
nó chỉ đơn thuần vẽ một hộp bên ngoài phần văn bản.

Ví dụ dưới đây cho thấy một số ứng dụng của lệnh \ci{makebox} và
lệnh \ci{framebox}

\begin{example}
\makebox[\textwidth]{%
    ở giữa}\par
\makebox[\textwidth][s]{%
    dàn trải}\par
\framebox[1.1\width]{Đóng
khung một văn bản!} \par

\framebox[0.8\width][r]{Ô kìa,
    phần văn bản quá dài!!!} \par
\framebox[1cm][l]{không có
     chi, tôi cũng vậy}
Bạn đọc được phần văn bản này chứ?
\end{example}

Bây giờ, bạn đã có thể điều khiển việc định dạng theo chiều ngang,
bước tiếp theo là việc thực hiện những định dạng theo chiều
dọc.\footnote{Việc điều khiển định dạng hoàn toàn phải là sự tổng
hợp hài hoà của việc điều khiển theo chiều ngang và theo chiều
dọc}.

\begin{lscommand}
\ci{raisebox}\verb|{|\emph{lift}\verb|}[|\emph{depth}\verb|][|\emph{height}\verb|]{|\emph{text}\verb|}|
\end{lscommand}

\noindent lệnh này cho phếp bạn định nghĩa thuộc tính theo chiều
dọc của hộp. Bạn cũng có thể sử dụng các lệnh \ci{width},
\ci{height}, \ci{depth} và \ci{totalheight} ở 3 tham số đầu để xác
định kích thước của hộp bên trong tham số \emph{text}.

\begin{example}
\raisebox{0pt}[0pt][0pt]{\Large%
\textbf{Aaaa\raisebox{-0.3ex}{a}%
\raisebox{-0.7ex}{aa}%
\raisebox{-1.2ex}{r}%
\raisebox{-2.2ex}{g}%
\raisebox{-4.5ex}{h}}}
Hãy chú ý khả năng định
dạng hết sức tinh
tế và thú vị của \LaTeX{}.
\end{example}

\section{Đường kẻ và thanh ngang}
\label{sec:rule} Trong một số trang ở các phần trước, bạn đã thấy
lệnh:

\begin{lscommand}
\ci{rule}\verb|[|\emph{lift}\verb|]{|\emph{width}\verb|}{|\emph{height}\verb|}|
\end{lscommand}

\noindent Thông thường, lệnh này được sử dụng để vẽ các hộp đen.
\newpage
\begin{example}
\rule{3mm}{.1pt}%
\rule[-1mm]{5mm}{1cm}%
\rule{3mm}{.1pt}%
\rule[1mm]{1cm}{5mm}%
\rule{3mm}{.1pt}
\end{example}

\noindent Lệnh này rất hữu dụng để vẽ các hàng ngang và hàng dọc.
Ví dụ như đường kẻ ngang trong phần tựa đề của trang được tạo với
lệnh \ci{rule}.

Một đường kẻ ngang không có chiều rộng và chỉ có một chiều cao xác
định là một trường hợp đặc biệt. Trong ngành soạn thảo chuyên
nghiệp, nó được gọi là ``\wi{strut}''. Nó được sử dụng để đảm bảo
rằng một thành phần trên trang giấy có một chiều cao nhỏ nhất xác
định. Bạn có thể sử dụng nó trong môi trường \texttt{bảng} để chắc
chắn rằng mỗi hàng có một chiều cao xác định nhỏ nhất.

\begin{example}
\begin{tabular}{|c|}
\hline
\rule{1pt}{4ex}Pitprop \ldots\\
\hline
\rule{0pt}{4ex}Strut\\
\hline
\end{tabular}
\end{example}

\bigskip
{\flushright Hết.\par}

%
% Local Variables:
% TeX-master: "lshort2e"
% mode: latex
% coding: utf-8
% End:
