Sender: |
|
Date: |
Mon, 6 Feb 2012 06:36:23 -0500 |
Reply-To: |
|
Subject: |
|
MIME-Version: |
1.0 |
Message-ID: |
|
In-Reply-To: |
<20120206111933.GA11183@csmvddesktop> |
Content-Type: |
text/plain; charset=ISO-8859-1 |
From: |
|
Parts/Attachments: |
|
|
> 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
|
|
|