LATEX-L Archives

Mailing list for the LaTeX3 project

LATEX-L@LISTSERV.UNI-HEIDELBERG.DE

Options: Use Classic View

Use Monospaced Font
Show Text Part by Default
Condense Mail Headers

Topic: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Sender: Mailing list for the LaTeX3 project <[log in to unmask]>
Date: Mon, 6 Feb 2012 06:36:23 -0500
Reply-To: Mailing list for the LaTeX3 project <[log in to unmask]>
MIME-Version: 1.0
Message-ID: <[log in to unmask]>
In-Reply-To: <20120206111933.GA11183@csmvddesktop>
Content-Type: text/plain; charset=ISO-8859-1
From: Bruno Le Floch <[log in to unmask]>
Parts/Attachments: text/plain (58 lines)
> In the equivalent of my recurrence equations implementation, the
> macro \f:n is defined _after_ the substitution. The error complains
> about \f:n not being defined. Defining \f:n _before_ the substitution
> works fine.

The problem is that you \tl_use:N \l_expr_tl before defining \f:n. If
you look at which line the error occurs, this is the line. To display
a token list to the terminal (or log file), use one of the lines

\tl_show:N \l_expr_tl
\iow_term:x { \tl_to_str:N \l_expr_tl }
\iow_log:x { \tl_to_str:N \l_expr_tl }

Those differ in the details, but give you the information without
expanding the token list: the last two lines convert the token list to
a string of characters before printing them to the terminal or the log
file. On the other hand, \tl_use:N is like typing the token list in
your file. It will then be run as normal code, in particular expanding
macros, including \f:n which is not defined yet.

> In my recurrence equation implementation, defining \f:n _after_ the
> substitution is possible, but it requires a bit more work. Does \f:n
> have to be known at substitution time?

It does not have to be defined at substitution time, but at use time. See below.

-- 

\documentclass{article}
\usepackage{xparse,l3regex}
\begin{document}

\ExplSyntaxOn

\tl_new:N \l_name_tl
\tl_set:Nn \l_name_tl {f}
\tl_new:N \l_expr_tl
\tl_set:Nn \l_expr_tl {f{i}}

\iow_term:x { before:~\tl_to_str:N \l_expr_tl }
\iow_term:x { and~\tl_to_str:N \l_name_tl }

\regex_replace_all:nnN
  {\b\u{l_name_tl}\b} {\c{\u{l_name_tl}:n}} \l_expr_tl

\iow_term:x { after:~\tl_to_str:N \l_expr_tl }
\iow_term:x { and~\tl_to_str:N \l_name_tl }

% Define \f:n before using it! :-)
\cs_new_nopar:cpx { \l_name_tl :n } #1{}
after(\tl_use:N \l_expr_tl)

\end{document}

-- 
Regards,
Bruno

ATOM RSS1 RSS2