f



starting a LaTeX argument with "XX" or "AA" causes macro problems but "XY" is OK

I'm trying to modify the book.cls file to include a Foreword and
have defined a command \forewordbody{}.

If I call this as
  \forewordbody{The quick brown fox}
it works fine, but if I call it as
  \forewordbody{XXYY The quick brown fox}
the result seems to be "empty" when tested, and the string
  YY The quick brown fox
(note: the XX is missing) appears in the output at the
place (marked "HERE" below) where the test was performed.
Any repeated letter shows the problem ("xx", "aa").  I often
use "XXX" to mark items in the text that I have to fix up later,
which is when I saw this problem.

  Any ideas what's happening?

----

In the class file I have:

\long\def\forewordbody#1{\gdef\@forewordbody{#1}}
\gdef\@forewordbody{}

....

\if\@forewordbody\empty\else         <---
	\Large FOREWORD
	\@forewordbody
	...
\fi

0
ggrps (1)
10/20/2005 2:27:19 PM
comp.text.tex 39029 articles. 3 followers. Post Follow

2 Replies
279 Views

Similar Articles

[PageSpeed] 39

<ggrps@uit.co.uk> wrote:

> I'm trying to modify the book.cls file to include a Foreword and
> have defined a command \forewordbody{}.
> 
> If I call this as
>   \forewordbody{The quick brown fox}
> it works fine, but if I call it as
>   \forewordbody{XXYY The quick brown fox}
> the result seems to be "empty" when tested, and the string
>   YY The quick brown fox
> (note: the XX is missing) appears in the output at the
> place (marked "HERE" below) where the test was performed.
> Any repeated letter shows the problem ("xx", "aa").  I often
> use "XXX" to mark items in the text that I have to fix up later,
> which is when I saw this problem.
> 
>   Any ideas what's happening?
> 
> ----
> 
> In the class file I have:
> 
> \long\def\forewordbody#1{\gdef\@forewordbody{#1}}
> \gdef\@forewordbody{}
> 
> ...
> 
> \if\@forewordbody\empty\else         <---
>  \Large FOREWORD
>  \@forewordbody
>  ...
> \fi

Use \ifx, since \if compares the two tokens following it /after/
expansion of the token following it. So, when \@forewordbody has 
"XXsomething" as replacement text, you have

\if XXsomething\empty\else some other thing\fi

which evaluates to true and so the final expansion is "something".

It happens also that

\if{}{}something\else some other thing\fi

expands to "some other thing".

Ciao
Enrico
0
gregorio (1367)
10/20/2005 3:11:35 PM
<ggrps@uit.co.uk> wrote in message
news:1129818439.094465.302300@f14g2000cwb.googlegroups.com...
> I'm trying to modify the book.cls file to include a Foreword and
> have defined a command \forewordbody{}.
>
> If I call this as
>   \forewordbody{The quick brown fox}
> it works fine, but if I call it as
>   \forewordbody{XXYY The quick brown fox}
> the result seems to be "empty" when tested, and the string
>   YY The quick brown fox
> (note: the XX is missing) appears in the output at the
> place (marked "HERE" below) where the test was performed.
> Any repeated letter shows the problem ("xx", "aa").  I often
> use "XXX" to mark items in the text that I have to fix up later,
> which is when I saw this problem.
>
>   Any ideas what's happening?
>
> ----
>
> In the class file I have:
>
> \long\def\forewordbody#1{\gdef\@forewordbody{#1}}
> \gdef\@forewordbody{}
>
> ...
>
> \if\@forewordbody\empty\else         <---
> \Large FOREWORD
> \@forewordbody
> ...
> \fi

Please try \ifx instead of \if.

\if expands tokens until it gets two unexpandable tokens.
And then it tests to see if the character codes agree.

Hence XX and AA give true, but XY gives false.

-- 
Jonathan


0
J.Fine (440)
10/20/2005 3:45:58 PM
Reply:

Similar Artilces:

"""""""""ADD ME""""""""""
Hi , Hope you are doing great. Please let me take this opportunity to introduce myself, Iam Karthik working with BhanInfoi Inc, a NY based company. We have consultants on our bench on various technologies, my request is to add me to your distribution list and kindly do send me the requirements. i have the below list available 1. Mainframe 2. Java 3.. Financial Analyst 4. Data Architect If there is any vendor ship agreement which has to be signed then I would like to take an opportunity to represent my company and expect your cooperation... ...

A problem about "[ ]" "( )" "="
I want to read several images saved in a director,and give them to I1,I2 ,I3....,using the following codes: filelist=dir(['c:\MATLAB701\work\...\*.jpg']); for i=1 :length(filelist) I=imread(fullfile('c:\MATLAB701\work\...',filelist(i).name)); end; but failed. Then I used I(i)=imread... ,still failed. How could I do? "John" <mailofww@126.com> wrote in message news:ef19e12.-1@webx.raydaftYaTP... >I want to read several images saved in a director,and give them to > I1,I2 ,I3....,using the following codes: > filelist=dir(['c:\MATLAB701\work\.....

Urgent Requirement in """""""""""""NEW YORK""""""""""""""""
Hello Partners, Please find the requirement below. Please send the updated resume along with rate and contact no. REQ#1: Title : Java Developer ( Rating Project) Duration : 6 months Rate : open Location : NY strong java, WebLogic 9.2, Web Services, Oracle REQ#2: Title : Java Developer Duration : 4 months Rate : open Location : NY Strong java, SQL REQ#3: Title : VB.Net Consultant Location : NY Duration : 4 months Rate : open Primarily looking at someone who has Excel, VB.net and Oracle (good to have). Req #4: Title : Java Developer (MSA Project) Duration : 6+ months Rate : open Location : NY Note : Please send your updated resume along with contact no karthik@bhaninfo.com : No phone calls please. Thanks & Regards Karthik BhanInfo karthik@bhaninfo.com ...

about "++" and "--"
why this program snippet display "8,7,7,8,-7,-8" the program is: main() { int i=8; printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--); } > why this program snippet display "8,7,7,8,-7,-8" Ask your compiler-vendor because this result is IMHO implementation-defined. Check this out: http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.15 http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.16 Regards, Irina Marudina fxc123@gmail.com wrote: > why this program snippet display "8,7,7,8,-7,-8&q...

"out" and "in out"
Hi i found the following explaination: In Ada, "in" parameters are similar to C++ const parameters. They are effectively read-only within the scope of the called subprogram. Ada "in out" parameters have a reliable initial value (that passed in from the calling subprogram) and may be modified within the scope of the called procedure. Ada "out" parameters have no reliable initial value, but are expected to be assigned a value within the called procedure. What does "have no reliable initial value" mean when considering the "out" parameter? By c...

why "::", not "."
Why does the method of modules use a dot, and the constants a double colon? e.g. Math::PI and Math.cos -- Posted via http://www.ruby-forum.com/. On Oct 26, 2010, at 01:48 , Oleg Igor wrote: > Why does the method of modules use a dot, and the constants a double > colon? > e.g. > Math::PI and Math.cos For the same reason why inner-classes/modules use double colon, because = they're constants and that's how you look up via constant namespace. Math::PI and ActiveRecord::Base are the same type of lookup... it is = just that Base is a module and PI is a float....

"/a" is not "/a" ?
Hi everybody, while testing a module today I stumbled on something that I can work around but I don't quite understand. >>> a = "a" >>> b = "a" >>> a == b True >>> a is b True >>> c = "/a" >>> d = "/a" >>> c == d True # all good so far >>> c is d False # eeeeek! Why c and d point to two different objects with an identical string content rather than the same object? Manu Emanuele D'Arrigo wrote: >>>> c = "/a" >>>&...

"my" and "our"
Hi, while testing a program, I erroneously declared the same variable twice within a block, the first time with "my", the second time with "our": { my $fz = 'VTX_Link'; .... ( around 200 lines of code, all in the same block) our $fz = 'VTX_Linkset'; ... } So the initial contents of the $fz declared with "my" is lost, because "our" creates a lexical alias for the global $fz, thus overwriting the previous "my" declaration. It was my error, no question. But I wonder why Perl doesn't mention this - even with "use s...

"or" and "and"
Hi, I'm just getting to discover ruby, but I find it very nice programming language. I just still don't understand how the "or" and "and" in ruby... I was playing with ruby and for example made a def to print Stem and Leaf plot (for those who didn't have a statistics course or slept on it, e.g. http://cnx.org/content/m10157/latest/) Here is the Beta version of it: class Array def n ; self.size ; end def stem_and_leaf(st = 1) # if st != (2 or 5 or 10) then ; st = 1 ; end k = Hash.new(0) self.each {|x| k[x.to_f] += 1 } k = k.sort{|a, b| a[0].to_f <=&g...

"If then; if then;" and "If then; if;"
I have a raw data set which is a hierarchical file: H 321 s. main st P Mary E 21 F P william m 23 M P Susan K 3 F H 324 S. Main St I use the folowing code to read the data to creat one observation per detail(P) record including hearder record(H): data test; infile 'C:\Documents and Settings\retain.txt'; retain Address; input type $1. @; if type='H' then input @3 Address $12.; if type='P' then input @3 Name $10. @13 Age 3. @16 Gender $1.; run; but the output is not what I want: 1 321 s. main H 2 321 s. main P Mary E 21 F 3 321 s...

"In" "Out" and "Trash"
I just bought a new computer and I re-installed Eudora Light on my new computer. But when I open Eudora, the "In", "Out" and "Trash" links are not on the left side of the screen the way they were on my old computer. How can I get these links back on the left side of the screen? Thank you. On 25 Mar 2007 09:49:22 -0700, "abx" <abfunex@yahoo.com> wrote: >I just bought a new computer and I re-installed Eudora Light on my new >computer. But when I open Eudora, the "In", "Out" and "Trash" links >are ...

Does it need a ";" at the very after of "if" and "for"
write code like: int main(void) { int a=10; if(a<20) {} } Compiler ok on dev-cpp . don't we have to add a ";" after if statement? marsarden said: > write code like: > > int main(void) > { > int a=10; > if(a<20) > {} > } > > Compiler ok on dev-cpp . don't we have to add a ";" after if > statement? The syntax for 'if' is: if(expression) statement There is no semicolon after the ) but before the statement. The statement is either a normal statement (which can be empty), ending in a semicolon:- if(expr) ...

Urgent JAVA Requirement in """"""NEW YORK"""""""""
Hello Partners, How are you ? Please find the requirement below. Location : NY Duration : 8 mnths Rate :Open Job description: Java/J2EE Web Service Developer =B7 (4+ years of application development experience in Java/J2EE and Web service technologies. =B7 Experience with spring & Hibernate. =B7 Experience with J2EE Application Server (preferably Web logic). =B7 Preferable Aqua logic DSP Experience =B7 Preferable Sonic ESB Composite Service experience Experience w...

Gary Sokolich """"""
"""""""""" http://www.manta.com/c/mmlq5dm/w-gary-sokolich W Gary Sokolich 801 Kings Road Newport Beach, CA 92663-5715 (949) 650-5379 http://www.tbpe.state.tx.us/da/da022808.htm TEXAS BOARD OF PROFESSIONAL ENGINEERS February 28, 2008 Board Meeting Disciplinary Actions W. Gary Sokolich , Newport Beach, California �V File B-29812 - It was alleged that Dr. Sokolich unlawfully offered or attempted to practice engineering in Texas (...) Dr. Sokolich chose to end the proceedings by signing a Consent Order that was accepted by ...

puts "\\".gsub("\\", "\\\\")
Hello, I have a mini-ruby quiz. Guess what this line of code writes to the console, then try it for yourself: puts "\\".gsub("\\", "\\\\") Why is that so? Martin From: martinus [mailto:martin.ankerl@gmail.com]=20 # Hello, I have a mini-ruby quiz. Guess what this line of code writes to # the console, then try it for yourself: # puts "\\".gsub("\\", "\\\\") puts "\\".gsub("\\", "\\\\") \ #=3D> nil # Why is that so? faq. escaping the escape in sub/gsub. search the archives. maybe you want somethin...

Question about "sprintf" "@" "do for"
Hello, this works: A1=3D1 A2=3D2 A3=3D3 i=3D1 vari=3Dsprintf("A%.f",i) print vari,"=3D",@vari i=3Di+1 vari=3Dsprintf("A%.f",i) print vari,"=3D",@vari i=3Di+1 vari=3Dsprintf("A%.f",i) print vari,"=3D",@vari do for [i=3D1:3]{ vari=3Dsprintf("A%.f",i) print vari } But I want to have "print vari,"=3D",@vari" in the loop. But it dosen't=20 work. Why can't I use "print vari,"=3D",@vari" in the loop? Is there a=20 solution for? J=C3=B6rg Jörg ...

"==" is NOT TRUE "==", WHY?
[CODE START] x=5; y=8; if (x + y + 1E-15 == 13) a = 3 else a = 8 end [CODE END] When x + y + 1E-15, the code above returns a = 8. When x + y + 1E-16, the code above returns a = 3. Why? Kindly advise. Thanks. "onemilimeter Chen" <onemm@example.com> wrote in message <g7adrj$5tr$1@fred.mathworks.com>... > [CODE START] > x=5; > y=8; > if (x + y + 1E-15 == 13) > a = 3 > else > a = 8 > end > [CODE END] > > When x + y + 1E-15, the code above returns a = 8. > When x + y + 1E-16, the code above returns a = 3. > > Why? ...

why have both "." and "->" ?
I used to remember why c++ needed both ? Could somebody help me here ? For example class A{ f(); }; A* aa; You could do either "aa->f()" or "(*aa).f()". So why does C++ need both operators. Raj "raj" <rajkumar@hotmail.com> schreef in bericht news:d7fee6d0.0406230748.694b966b@posting.google.com... > I used to remember why c++ needed both ? > Could somebody help me here ? > > For example > > class A{ > f(); > }; > > A* aa; > > You could do either "aa->f()" or "(*aa).f()". So why does C++...

how to change "/" to "\"
iam new to shell scripting and i have plz can anyone help in changing the pattrern "/" to "\" using the sed command. olympie@gmail.com wrote: > iam new to shell scripting and i have plz can anyone help in changing > the pattrern "/" to "\" using the sed command. sed 's/\//\\/g' will replace all '/' with '\' srp -- http://saju.net.in Saju Pillai <saju.pillai@gmail.com> wrote: >> iam new to shell scripting and i have plz can anyone help in changing >> the pattrern "/" to "\" using ...

what does the "+" and the "-" mean?
I recently read what the "+" and the "-" signs mean for compact discs. Of course, a friend has just asked me and I now forget. I've searched all over the place with no results. Anyone know? TIA! .. -------------------------------------- Mike Richter, were you born with "Scam Artist" emblazoned on your face? -------------------------------------- roscoe james wrote: > > I recently read what the "+" and the "-" signs mean for compact discs. Of > course, a friend h...

" | " and "~" on solaris
hi, someone know how configure the input keyboard. when i want "|" on the term i have "^\" when i want "~" i have "^^". someone can help me ? Thanks gege1234 wrote: > hi, > > someone know how configure the input keyboard. > when i want "|" on the term i have "^\" > when i want "~" i have "^^". > > someone can help me ? > > Thanks man xmodmap Hope this helps -- Axel i have try "loadkeys" and my keyboard became as before thanks ...

How to change "/" to "\"
Now, the output as below /a/b/c.txt b/c.txt x:/b/c.txt , Need to change x:\b\c.txt #!/bin/ksh # echo.ksh a=/a/b/c.txt echo $a echo ${a#/*/} y=`echo x:/${a#/*/} | tr -s '/' '\'` echo $y moon wrote: > Now, the output as below > > /a/b/c.txt > b/c.txt > x:/b/c.txt , Need to change x:\b\c.txt > > > #!/bin/ksh > # echo.ksh > a=/a/b/c.txt > echo $a > echo ${a#/*/} > y=`echo x:/${a#/*/} | tr -s '/' '\'` > echo $y > > One escape necessary: echo x:/${a#/*/} | tr -s '/' '\\' Two escapes necessar...

"for" with "else"?
While trying to print a none empty list, I accidentaly put an "else" statement with a "for" instead of "if". Here is what I had: if ( len(mylist)> 0) : for x,y in mylist: print x,y else: print "Empty list" which was supposed to be: if ( len(mylist)> 0) : for x,y in mylist: print x,y else: print "Empty list" Is this to be expected? (python 2.2.2) ++++++++++++++++++++++++++++++= >>> for x in range(5): .... print x*x .... else: .... print "done" .... 0 1 4 9 16...

"final" in "for"
What I also would like to see in a future Java version would be for( final int i = 0; i < n; ++i ) to be allowed, meaning that �i� can not be modified except for in the parentheses of the for statement. This does not invalidate any existing code, but would allow to express such an intention. Stefan Ram wrote: > What I also would like to see in a future Java version > would be > > for( final int i = 0; i < n; ++i ) > > to be allowed, meaning that �i� can not be modified > except for in the parentheses of the f...

Web resources about - starting a LaTeX argument with "XX" or "AA" causes macro problems but "XY" is OK - comp.text.tex

Resources last updated: 3/11/2016 2:03:39 PM