# \write18 pass % through to shell

This has sort of been touched on in some other postings, but for path reasons I would like to avoid using a shell script and just use ImageMagick's (IM) convert command line executable directly from a `\immediate\write18{...}` in a macro command, but in my IM convert instructions I need to pass the `%` (ASCII 37) as part of a macro.

However I try to conceive of making a `%` - and I have tried numerous ways(!) I always end up getting the Latex code I am using for the % passed through to the command line.

The obvious one, `\%` goes to the shell as `\%` directly and that is the pattern followed by all other options.

What I obviously seem to need is some way to generate the ASCII or unicode for `%` and get that to the shell from LaTeX via `\write18` or other.

Or have some sort of temporary suspension on the LaTeX usage of `%` so that it can be part of a `\write18{}` and not break the command as a comment starter, and so be passed with out needing to be LaTeX escaped first.

-
Did you try `\makeatletter \immediate\write18{...\@percentchar ..}`? –  Ulrike Fischer May 5 '11 at 11:50
@UlrikeFischer: Is there a macro for `#`? I have tried `\@sharpchar` but it does not exists. –  kiss my armpit Nov 5 '13 at 17:01

Use `\@percentchar` instead of `%`. You need to say `\makeatletter` before the `\write` and `\makeatother` after it to allow for the `@` in the macro name if the code isn't located in a package or class or already inside a `\makeatletter` ... `\makeatother` block.

There are also `\@backslashchar` for `\` and also `\@charlb` and `\@charrb` for `{` and `}`. The are listed as "String constants" in my `macros2e` document as mentioned in Documentation reference for LaTeX internal commands?

You can also now easily define new string macros for any set of characters with the new version of the `newverbs` package. E.g. to define a macro for the ampersand use:

``````\usepackage{newverbs}[2011/07/24]
\Verbdef\amp{&}
``````

Note that spaces behind macros are removed also in a `\write` statement, so you might need to manually insert one using `\space`.

-
Thanks very much Martin, From comp.text.tex there are some very useful concepts I just found before I got notification of your post. groups.google.com/group/comp.text.tex/browse_thread/thread/… Things like creating temporary batch files form within LaTeX directly where necessary 'difficult' characters can be written directly, and use of \string& and \@percentchar (with (See arf1.de/wordpress/?p=436). –  PaulANormanNZ May 7 '11 at 4:15
@Martin Scharrer Hi I've had login in problems and only just got back, but I can not see a tick symbol on this page at all Martin - nearly sent post then found it not on the right bit on the left-went crazy trying to work out where it was on the upper right! thanks, Paul –  PaulANormanNZ Nov 6 '11 at 5:23
@PaulANormanNZ: Sorry, I meant upper left. ;-) –  Martin Scharrer Nov 6 '11 at 7:49