% This is a second test file for the "msg" package; % the first one being the msg.dtx file itself. % % If you want to test your own language messages file, % you can add your own \testlanguagefile at the end of this % test file. % \documentclass[10pt]{article} \usepackage{inputenc}% Load usual input encoding. \let\kbencoding\undefined% Don't use now any output encoding. \usepackage[T1]{fontenc} \usepackage[norsk,german,frenchb,english]{babel} \usepackage{shortvrb} \usepackage{msg} % \usepackage[tracefiles]{msg}% should also be tested with "tracefiles" % \usepackage{msg,french}% should also be tested with your language. % As LaTeX don't save the input encoding % the "msg" package will do it. \inputencoding{latin1}% To have a _global_ latin1 encoding \begin{document} \MakeShortVerb{|} \title{The "msg" package test file} \author{}\date{} \maketitle The following examples are going from the ``msg'' documentation itself. \section*{Examples \& tests} |\issuemsg1(msg)| will give at the console: \\ \centerline{\tt\getmsg1(msg)} but |\issuemsg01(msg)| will give: \retrievemsg01(msg){\tt\themsg}. While defining |\def\test#1{`\issuemsg4(msg)[#1]'}| the following call |\emph{\test{SPECIAL}}| will print: \def\test#1{`\getmsg4(msg)[#1]'}\\ \centerline{\emph{\test{SPECIAL}}} showing that the argument was inserted inside the message at the exact area, replacing |#1|. In a French document, the same codes will issue:\\ \bgroup\selectlanguage{french} \centerline{\tt\getmsg1(msg)} \centerline{\retrievemsg01(msg){\tt\themsg}} \centerline{\emph{\test{SPECIAL}}} \egroup \retrievemsg1(msg) |\retrievemsg1(msg)| will set |\themsg| with the value of the corresponding message ; nothing is issued at the console nor in the log, except if the |<|\emph{id}|>| is not found in the message file. \noindent|\show\themsg| will explain: \noindent|> \themsg=macro:| \noindent|->|\texttt{\themsg} \noindent In a French document, the same code will issue: \bgroup\selectlanguage{french} \retrievemsg1(msg) \noindent|> \themsg=macro:| \noindent|->|\texttt{\themsg} \egroup In case the message file is empty or do not contain neither the message ``id'' nor any |\msg{*}| macro then we will obtain: \bgroup\makeatletter \catcode`*=\active\let*\relax%^^A for expansion when \read case. \let\@msg@code@ast=\active%^^A to simulate a missing \msg{*}. \retrievemsg999(msg) \noindent|> \themsg=macro:| \noindent|->|\texttt{\themsg} \egroup It may also arrive that we don't find that former message (|#6|) at all then we will issue the usual \LaTeX\ |\PackageError| macro. We use message \# 5 of |msg-msg.tex| file as following: \noindent \def\foo#1{\retrievemsg5(msg)[#1]\themsg\the\inputlineno\ \themsgi} |\def\foo#1{\retrievemsg5(msg)[#1]\themsg\the\inputlineno\ \themsgi}| \medskip\noindent then |\emph{The \foo{test}}| will generate: \centerline{The \emph{\foo{test}}} \noindent In a French document, the code |\emph{La \foo{test}}| will issue: \bgroup\selectlanguage{french} \centerline{\emph{La \foo{test}}} \egroup \medskip We will now use the message \# 8 of |msg-msg.tex| file in order to show the customization set in that file. \medskip\noindent |\getmsg8(msg)| will generate:\\ \getmsg8(msg) The following |\texttt{\getmsg9(msg)}| using |\MessageBreak| will give at the console:\\% {\catcode`^^J=\active\let^^J\\%^^A We try to simulate the output console. \def\@msgalspace{\hbox{\space}}%^^A In order to simule \obeyspaces \def\space{\@sptoken}%^^A we used \space in \msgheader argument. \def\MessageBreak{^^J\expandafter\@msgalign\msg@header\void% \hbox{\space}}%^^A Please explain this tt behaviour... \texttt{\getmsg9(msg)}\\% } (same message issued to the console\issuemsg9(msg)).%^^A Issue it really. \noindent And in a French document, the same calls will issue:\\ \bgroup\selectlanguage{french}% \getmsg8(msg)\\% \catcode`<=12\catcode`>=12\relax%^^A To remove ltxdoc active chars. \catcode`^^J=\active\let^^J\\%^^A We try to simulate the output console. \def\@msgalspace{\hbox{\space}}%^^A In order to simule \obeyspaces \def\space{\@sptoken}%^^A We try to simulate the output console. \def\MessageBreak{^^J\expandafter\@msgalign\msg@header\void% \hbox{\space}}%^^A Please explain this tt behaviour... \texttt{\getmsg9(msg)} \egroup Below is a test of an emphasized message (|\texttt{\getmsg{10}(msg)}|): {\catcode`^^J=\active\let^^J\\%^^A We try to simulate the output console. \def\msg{\@ifstar{\def\@msgskip{\\}\@msg}{\def\@msgskip{}\@msg}}% \def\@msgalspace{\hbox{\space}}%^^A In order to simule \obeyspaces \def\space{\@sptoken}%^^A we used \space in \msgheader argument. \def\MessageBreak{^^J\expandafter\@msgalign\msg@header\void% \hbox{\space}}%^^A Please explain this tt behaviour... \noindent\texttt{\getmsg{10}(msg)}% } (same message issued to the console\issuemsg{10}(msg)). Notice that the "msg" \emph{id} can be any string, not necessarily a string of digits. Here is an expample : \begin{verbatim} \newcommand{\ID}{12} \texttt{\getmsg{\ID}(msg)} \end{verbatim} \noindent will generate the following: \\ \newcommand{\ID}{12}\texttt{\getmsg{\ID}(msg)} \section*{Test the message encoding} Temporary we reset the input encoding to \texttt{ascii} by calling |\inputencoding{ascci}| \bgroup \inputencoding{ascii} and switch to Norsk \selectlanguage{norsk}% to typeset the message \# 12 (|\getmsg{12}(msg}|):\\ ``\getmsg{12}(msg)'' \egroup \section*{Message list for all messages files} \long\def\testlanguagefile#1{% {\selectlanguage{#1}% Don't forget to add it to \usepackage[...]{babel} \parindent=0pt\tt \textsf{Message list for the ``#1'' messages file:}\\[0.5\baselineskip] \getmsg1(msg)\hfuzz\maxdimen\\ \getmsg2(msg)\hfuzz\maxdimen\\ \getmsg3(msg)\hfuzz\maxdimen\\ \getmsg4(msg)\hfuzz\maxdimen\\ \getmsg5(msg)\hfuzz\maxdimen\\ \getmsg6(msg)\hfuzz\maxdimen\\ \getmsg7(msg)\hfuzz\maxdimen\\ \getmsg8(msg)\hfuzz\maxdimen\\ \getmsg9(msg)\hfuzz\maxdimen\\ \getmsg{10}(msg)\hfuzz\maxdimen\\ \getmsg{11}(msg)\hfuzz\maxdimen\\ \getmsg{12}(msg)\hfuzz\maxdimen\\ \getmsg{*}(msg)\par\bigskip \typeout{Message list for the ``#1'' messages file^^J} \issueallmsg(msg)% }}% All messages for each language are now listed in the document and on the console. \testlanguagefile{english} \testlanguagefile{french} \testlanguagefile{norsk} \testlanguagefile{german} \section*{and now?} You could try it on any of your document class or package... good testing. \end{document}