%% This is a LaTeX2e package for the CTeX FAQ document.
%%
%% Created by aloft ([email protected])
%%
%% Version 0.8 (24-May-2009)
%%
%% $Id: ctex-faq.sty 83 2007-01-30 09:48:43Z aloft $
%%
\def\filedate{2009/05/24}
\def\fileversion{0.8}
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{ctex-faq}[\filedate\space\fileversion\space(Chinese TeX FAQ macros)]
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Options
%
\newif\ifnewfaqmark
\newfaqmarktrue
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Loading packages
%
%
\RequirePackage{ifpdf}
\RequirePackage[UTF8,fancyhdr]{ctex}
\ifpdf
 \RequirePackage[pdftex,%
                unicode,%
      bookmarksnumbered,%
             colorlinks,%
         linkcolor=blue,%
             hyperindex,%
       plainpages=false,%
      pdfstartview=FitH]{hyperref}
\else
 \RequirePackage[dvipdfm,%
                unicode,%
       bookmarksnumbered,%
              colorlinks,%
          linkcolor=blue,%
              hyperindex,%
        plainpages=false,%
       pdfstartview=FitH]{hyperref}
\fi
%
%
\RequirePackage{color,verbatim,cite}
\RequirePackage{texnames,makeidx,indentfirst}
\RequirePackage{amsmath,amssymb,amsfonts,bm,manfnt}
\RequirePackage{textcomp}
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Typesetting TeX names
%
%
\DeclareRobustCommand\CTeX{$\mathbb{C}$\kern-.05em\TeX}
\DeclareRobustCommand\MiKTeX{MiK\TeX}
\DeclareRobustCommand\fpTeX{fp\TeX}
\DeclareRobustCommand\teTeX{te\TeX}
\DeclareRobustCommand\ConTeXt{Con\TeX{}t}
\DeclareRobustCommand\TeXLive{\TeX{}Live}
%
\newcommand\PS{PostScript}
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Modifing Styles
%
%
\setlength{\parskip}{0.75ex plus .2ex minus .5ex}
\renewcommand{\baselinestretch}{1.2}
%
% we don't want headings
\pagestyle{plain}
%
% we `number' our sections alphabetically
\renewcommand{\thesection}{\Alph{section}}
%
% we use superscript numerical citation with brackets
\def\@cite#1{\textsuperscript{[#1]}}
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Redefine some commands and environments
%
%
\newcommand*\contrib[2][]{{\it #2}\hspace*{1ex}%
 \def\reserved@a{#1}%
 \ifx\reserved@a\@empty
   (no email)
 \else
   (\href{mailto:#1}{#1})
 \fi}
%
% Quoted URL
\newcommand\faqurl[1]{\begin{quote}\url{#1}\end{quote}}
%
% Make index entry
\newcommand\faqindex[1]{\index{#1}#1}
%
% Quoted verbatim environment
\@namedef{prompt}{\quote\verbatim}
\expandafter\def\csname endprompt\endcsname {\endverbatim\endquote}
%
%
\newenvironment{lined}[1]%
{\begin{center}\begin{minipage}{#1}\hrule\medskip}
{\vspace{-1ex}\hrule \end{minipage}\end{center}}
%
% Marginal notes
\newcommand{\MarginalNotes}[1]{%
  \hskip 1sp \marginpar{\small\sffamily\raggedright #1}}
%
% Set RCS Keywords
\def\RCS{\RCS@process}
\def\RCS@process$#1: #2 ${%
 \def\RCS@keyword{#1}%
 \def\RCS@value{#2}%
 \ifx\RCS@value\empty%
   \def\RCS@value{N/A}%
 \fi%
 \@ifundefined{RCS@handle\RCS@keyword}%
   {\expandafter\edef\csname RCS\RCS@keyword\endcsname{\RCS@value}}%
   {\csname RCS@handle\RCS@keyword\endcsname}}
\def\RCS@handleDate{%
 \ifx\RCS@value{N/A}%
   \def\RCSDate\today%
   \let\RCSTime\relax%
 \else%
   \expandafter\RCS@setDate\RCS@value\@nil%
 \fi}
\def\RCS@setDate#1-#2-#3 #4\@nil{%
 \def\RCSday{#3}%
 \def\RCSmonth{#2}%
 \def\RCSyear{#1}%
 \def\RCSDate{\begingroup%
   \day \number\RCSday%
   \month \number\RCSmonth%
   \year \number\RCSyear%
   \today\endgroup}
 \def\RCSTime{#4}}
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Typesetting Commands
%
%
\newenvironment{latexcmd}%
   {\list{}{}\item\relax%
    \begin{tabular}{|l|}\hline\rule{0pt}{1em}\ignorespaces\small}%
   {\\\hline\end{tabular}\endlist}
%
%
% Index entry for an command
\newcommand\bs{\texorpdfstring{\texttt{\symbol{92}}}{\textbackslash}} %Print backslash
\def\cmdname{Commands}
\newcommand\cmdindex[1]{%
   \index{\cmdname!#1@\texttt{\bs#1}}%
   \index{#1@\texttt{\hspace*{-1.2ex}\bs #1}}}
\newcommand\cmd[1]{\cmdindex{#1}\texttt{\bs#1}} %Print command
\newcommand\cs[1]{\texttt{\bs#1}} %Print command without index
%
% Index entry for an package
\def\pkgname{Packages}
\newcommand\pkgindex[1]{%
   \index{\pkgname!#1@\textsf{#1}}%
   \index{#1@\textsf{#1}}}
\newcommand\pkg[1]{\pkgindex{#1}\textsf{#1}} %Print package
%
% Index entry for an environment
\def\envname{Environments}
\newcommand\envindex[1]{%
  \index{\envname!#1@\texttt{#1}}%
  \index{#1@\texttt{#1}}}
\newcommand\env[1]{\envindex{#1}\texttt{#1}}
%
% Argument and optional argument
\def\parg#1{\mbox{$\langle${\it #1\/}$\rangle$}}
\def\@smarg#1{{\tt\string{}\parg{#1}{\tt\string}}}
\def\@marg#1{{\tt\string{}{\rm #1}{\tt\string}}}
\def\marg{\@ifstar\@smarg\@marg}
\def\@soarg#1{{\tt[}\parg{#1}{\tt]}}
\def\@oarg#1{{\tt[}{\rm #1}{\tt]}}
\def\oarg{\@ifstar\@soarg\@oarg}
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Typesetting Code Fragments
%
%
%% using listings.sty
%%\lstset{language=[LaTeX]TeX}
%%\lstset{framexleftmargin=5pt, frame=shadowbox, rulesepcolor=\color{blue}}
%%\lstset{xleftmargin=20pt, xrightmargin=20pt}
%%\lstset{breaklines=false}
%%\lstnewenvironment{code}[2][]
%%    {\lst@TestEOLChar{#2}%
%%     \lstset{#1}%
%%     \csname\@lst @SetFirstNumber\endcsname}
%%    {\csname\@lst @SaveFirstNumber\endcsname}
%%
%% using verbatim.sty
%%\@namedef{code}{\quote\begingroup\@verbatim\frenchspacing\@vobeyspaces\verbatim@start}
%%\expandafter\def\csname endcode\endcsname {\endverbatim\endquote}
%
%
% This part is hacked from the verbatim.sty and lshort.sty
%
\definecolor{example@bkcolor}{gray}{.875}
%
\newwrite\example@out
\def\example@start{%
 \begingroup% Lets Keep the Changes Local
 \@bsphack
 \immediate\openout \example@out \jobname.exa
 \let\do\@makeother\dospecials\catcode`\^^M\active
 \def\verbatim@processline{%
   \immediate\write\example@out{\the\verbatim@line}}%
 \verbatim@start}
\def\example@finish{\immediate\closeout\example@out\@esphack\endgroup}
\def\example@code#1#2{%
 \colorbox{#1}{%
   \begin{minipage}[c]{#2}%
     \small\verbatiminput{\jobname.exa}%
   \end{minipage}%
 }%
}
\def\example@output#1{%
 \let\savefboxrule\fboxrule%
 \let\savefboxsep\fboxsep%
 \setlength{\fboxrule}{0.1pt}%
 \setlength{\fboxsep}{3mm}%
 \fbox{%
   \begin{minipage}[c]{#1}%
     \setlength{\fboxrule}{\savefboxrule}%
     \setlength{\fboxsep}{\savefboxsep}%
     \setlength{\parskip}{1ex plus 0.4ex minus 0.2ex}%
     \begin{trivlist}\item\small\input{\jobname.exa}\end{trivlist}
   \end{minipage}
 }%
}
%
% This is two environments to set LaTeX examples.
%
% example: On the left side the source text and on the
% right side the typeset text.
%
\newenvironment{example}%
 {\example@start}%
 {\example@finish%
  \list{}{\itemindent-\leftmargin}\item\relax%
  \makebox[\textwidth][c]{%
    \example@code{example@bkcolor}{0.5\textwidth}%
    \hspace{10pt}%
    \example@output{0.4\textwidth}%
  }%
  \endlist}
%
% code: Only the source text
%
\newenvironment{code}%
 {\example@start}%
 {\example@finish%
  \list{}{\itemindent-\leftmargin}\item\relax%
  \makebox[\textwidth][c]{%
    \example@code{example@bkcolor}{0.96\textwidth}%
  }%
  \endlist}
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Dangerous and doubly dangerous bends
%
%
\newlength{\dbend@width}
\newlength{\ddbend@width}
\newlength{\dbend@voffset}
\def\setdbend@width{%
 \settowidth{\dbend@width}{\dbend}%
 \setlength{\ddbend@width}{\dbend@width}%
 \multiply\dbend@width by 2%
 \multiply\ddbend@width by 3%
 \advance\ddbend@width by 1pt%
 \settoheight{\dbend@voffset}{\dbend}%
 \multiply\dbend@voffset by 22%
 \divide\dbend@voffset by 15%
 \advance\dbend@voffset by -\baselineskip}
%
% This parts is hacked from TeXbook
%
\def\d@nger{\begingroup\clubpenalty=10000\def\par{\endgraf\endgroup}
 \setdbend@width\noindent\hangindent\dbend@width\hangafter=-2
 \lower-\dbend@voffset\hbox to0pt{\hskip-\hangindent\dbend\hfill}}
%
\def\dd@nger{\begingroup\clubpenalty=10000\def\par{\endgraf\endgroup}
 \setdbend@width\noindent\hangindent\ddbend@width\hangafter=-2
 \lower-\dbend@voffset\hbox to0pt{\hskip-\hangindent\dbend\kern1pt\dbend\hfill}}
%
\def\danger{\d@nger}
\def\ddanger{\dd@nger}
\def\enddanger{\endgraf\endgroup}
%
%
\newenvironment{advanced}{\CJKfamily{kai}}{\CJKfamily{com}}
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Typesetting Questions
%
%
\setcounter{tocdepth}{3}
\setcounter{secnumdepth}{3}
\renewcommand\appendix{\par\setcounter{secnumdepth}{-1}}
%
% tableofcontents definition from article.cls
\renewcommand\tableofcontents{%
   \pdfbookmark[1]{\contentsname}{contents}%
   \section*{\contentsname
       \@mkboth{%
          \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
   \@starttoc{toc}%
   }
%
% thebibliography definition from article.cls
\renewenvironment{thebibliography}[1]
    {\section{\refname}%
     \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}%
     \list{\@biblabel{\@arabic\c@enumiv}}%
          {\settowidth\labelwidth{\@biblabel{#1}}%
           \leftmargin\labelwidth
           \advance\leftmargin\labelsep
           \@openbib@code
           \usecounter{enumiv}%
           \let\p@enumiv\@empty
           \renewcommand\theenumiv{\@arabic\c@enumiv}}%
     \sloppy
     \clubpenalty4000
     \@clubpenalty \clubpenalty
     \widowpenalty4000%
     \sfcode`\.\@m}
    {\def\@noitemerr
      {\@latex@warning{Empty `thebibliography' environment}}%
     \endlist}
%
% theindex definition from article.cls
\renewenvironment{theindex}
              {\if@twocolumn
                 \@restonecolfalse
               \else
                 \@restonecoltrue
               \fi
               \columnseprule \z@
               \columnsep 35\p@
               \twocolumn[\section{\indexname}]%
               \@mkboth{\MakeUppercase\indexname}%
                       {\MakeUppercase\indexname}%
               \thispagestyle{plain}\parindent\z@
               \parskip\z@ \@plus .3\p@\relax
               \let\item\@idxitem}
              {\if@restonecol\onecolumn\else\clearpage\fi}
%
% section definition from article.cls
\renewcommand\section{\@startsection {section}{\@ne}{\z@}%
                                  {-3.5ex \@plus -1ex \@minus -.2ex}%
                                  {2.3ex \@plus .2ex}%
                                  {\normalfont\Large\bfseries}}
\renewcommand*\l@section[2]{%
 \ifnum \c@tocdepth >\z@
   \addpenalty\@secpenalty
   \addvspace{1.0em \@plus\p@}%
   \setlength\@tempdima{1.5em}%
   \begingroup
     \parindent \z@ \rightskip \@pnumwidth
     \parfillskip -\@pnumwidth
     \leavevmode \bfseries
     \advance\leftskip\@tempdima
     \hskip -\leftskip
     #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
   \endgroup
 \fi}
%
% This parts is hacked from faq.sty of UKTUG
%
% subsections: these are a curious half-breed between latex sections
% and subsections -- as designed, i'm not intending there ever to be
% more than 9 per section (hahaha)
\renewcommand\subsection{\@startsection{subsection}{\tw@}{\z@}%
                                    {-3.25ex\@plus -1ex \@minus -.2ex}%
                                    {1.5ex \@plus .2ex}%
                                    {\normalfont\large\bfseries}}
\renewcommand*\l@subsection[2]{%
 \ifnum \c@tocdepth >\@ne
   \addpenalty\@secpenalty
   \addvspace{0.5em \@plus\p@}%
   \setlength\@tempdima{2.3em}%
   \begingroup
     \parindent \z@ \rightskip \@pnumwidth
     \parfillskip -\@pnumwidth
     \leavevmode \bfseries
     \advance\leftskip\@tempdima
     \hskip -\leftskip
     #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
   \endgroup
 \fi}
%
%
% the question structure
%
\ifx\faqlastver\undefined
 \let\faqlastver\faqversion
\fi
%
%
\newcommand\listofnewfaqs{\@starttoc{lon}}
\newcommand\listofrevfaqs{\@starttoc{lor}}
\newcommand\tableofnewfaqs{\@starttoc{ton}}
\newcommand\tableofrevfaqs{\@starttoc{tor}}
%
%

\newcommand{\FAQChangeList}{\clearpage%
 \ifx\faqlastver\faqversion
   \section{ChangeList of v\faqversion}
 \else
   \section{ChangeList of v\faqlastver\ --\ v\faqversion}
 \fi
 \subsection*{New}\begin{small}\tableofnewfaqs\end{small}
 \subsection*{Revised}\begin{small}\tableofrevfaqs\end{small}
 \vspace{\stretch{1}}
 \ifx\RCSDate\undefined\else
   \noindent\begin{small}(Last updated: \CTEXoptions[today=small]\RCSDate)\end{small}
 \fi}
%
%
\newif\ifquestion@new
\question@newfalse
\def\question@ver#1.#2|#3.#4\@nil{%
   \question@newtrue
   \ifnum#3<#1 \question@newfalse
   \else \ifnum#3=#1 \ifnum#4<#2 \question@newfalse \fi \fi
   \fi}
\def\question@chk#1#2#3#4#5#6{%
   \expandafter\question@ver\faqlastver|#6\@nil%
   \ifquestion@new
     \addtocontents{#1}{\protect\ref{#4}}
     \addcontentsline{#2}{question}{\protect\numberline{\thequestion}#5}
     \ifnewfaqmark
       \marginpar{\vspace{-1em}\small\sffamily\raggedright{\color{red}#3}\\v#6}
     \fi
   \fi}
%
%
% Question[label name]{question asked}{imported version}{revised version}
% if [label name] present, the named label is assigned with Qlabel
\newcounter{question}
\newcommand\Question[4][]{%
 \qu@stion{#2}%
 \def\reserved@a{#1}%
 \ifx\reserved@a\@empty
   \PackageWarning{ctex-faq}{Question "#2" has no label}%
   \def\reserved@a{Q-\thequestion}
 \fi
 \Qlabel{\reserved@a}%
 \question@chk{lon}{ton}{New}{\reserved@a}{#2}{#3}
 \ifquestion@new\else
   \question@chk{lor}{tor}{Revised}{\reserved@a}{#2}{#4}
 \fi
}
\newcommand\qu@stion{\@startsection{question}{\thr@@}{\z@}%
                                  {-3.25ex \@plus -1ex \@minus -.2ex}%
                                  {0.75ex \@plus .2ex}%
                                  {\normalfont\normalsize\bfseries}%
}
\newcommand*\questionmark[1]{}
\newcommand*\l@question{\@dottedtocline{2}{2.0em}{2.3em}}
\newcommand*\toclevel@question{2}
%
%
% Qlabel and Qref: define and refer to labels
\def\Qname{Question}
% hyperref version of label doesn't get set until begin document
\AtBeginDocument{\let\Qlabel\label}
\newcommand\Qref[2][\Qname]{{#1}~\ref{#2}}
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
\endinput
%%
%% End of file `ctex-faq.sty'.