Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I would like to do a simple \StrSplit (from the xstring package) on a string I have, however, the string in question may contain a \par, and it appears that \@xs@StrSpl@t@@, which I can only imagine is an internal xstring macro, is not a long macro, so it causes an error.

Are there any workarounds? Other packages with similar functionality that accept long strings? A way to remove \par temporarily and put it back later?

EDIT: I only actually need to split off the first character, so if there's a way to do that directly on arbitrary strings (with the semantics of \noexpand), that would work too.

share|improve this question
add comment

1 Answer

You can try this to get the first character:

\documentclass{article}
\begin{document}

\makeatletter
\long\def\test#1{%
  \long\def\getfirstchar##1##2;{%
  \def\storeone{##1}
}
 \getfirstchar#1;
}
\makeatother


\test{This is \par something}

\storeone
\end{document}

The macro gets the first letter and stores it in another macro called storeone. I am not sure what you want to do exactly, other than get the first letter, perhaps you can expand on your question a bit. You can also have a look at source2e, there are similar commands such as \@firstoftwo.

share|improve this answer
    
Why the makeatletter there? You don't seem to use @. –  coppro Jan 14 '13 at 5:58
    
@centrifugal force:) You right they are not needed, I just typed them planning to use @ and then thought I maybe obscuring the concepts. –  Yiannis Lazarides Jan 14 '13 at 6:19
    
Also, this solution doesn't work if the string contains a semicolon; I need it to work for (nearly) arbitrary text. I was thinking maybe something clever with \futurelet to remove a token from the stream and then put it back. EDIT: picked a dummy command as a delimiter. Still doesn't handle curly-brace constructs well. I'm thinking maybe there's a futurelet trick? –  coppro Jan 14 '13 at 6:28
    
@copro The delimiting is not a big issue, you can delimit it with anything else you want (say @end). However, if you want to catch any type of character is another issue. Then futurelet is the answer. See how \@ifnextchar works, you need to clarify your case a bit better. –  Yiannis Lazarides Jan 14 '13 at 6:49
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.