Writing literal “#1” into an auxiliary file from a command with arguments

I am trying to write into an auxiliary file from a command with one argument. The written text is another `\createcommand` with one argument too. When I use "`#1`" the argument of meta-command is expanded. It's ok. The problem is how to literally write "`#1`" referencing the argument of command created in the auxiliary file. I tried `\#1`, `^^23 1` and `\noexpand#1`, but it didn't work.

This is my simplified example. The problem is the last `#1`. In this case I used "`\\#1`", but this adds an undesirable slash.

``````\newcommand{\writeChapterCounter}[1]{

\immediate\write\preludeauxfile{
{\#1 }
}
}
}
``````

Using `\writeChapterCounter{ChapToc}` it produces:

`````` \newcommand {\linktopageChapToc }[1]{ \hyperlink {topofpage.\arabic{chChapToc}} {\#1 } }
``````

Thanks!

• unrelated to `#` question, but you are missing a lot of `%` at ends of lines. – David Carlisle Jun 26 '15 at 16:24

You want `\string#` in the `\write` but to refer to `#` in the body of a definition you need `##` so

``````\string##
``````
• There is no need to write `#1` at all, because the argument of the new defined macro gets at the end of the definition text as last argument of `\hyperlink`. Then the new command can be defined without arguments and the argument in the input is later taken by `\hyperlink` directly.

• There are lots of (unwanted) spaces by line ends.

• I have added `\expandafter\noexpand` before the new command `\csname ...\endcsname`. It does not change the behavior, if the new command is undefined, because `\csname` automatically assigns it the meaning of `\relax`, which is not further expanded. But if the command is defined and can be expanded, the expansion would be written into the file, probably confusing `\newcommand`.

Code:

``````\newcommand{\writeChapterCounter}[1]{%
\immediate\write\preludeauxfile{%
\noexpand\newcommand{%
}{%
}%
}%
}
``````

Then `\writeChapterCounter{ChapToc}` will produce:

``````\newcommand {\linktocpageChapToc }{\hyperlink {topofpage.\arabic {chChapToc}}}
``````

And `\linktocpageChapToc{foobar}` will expand to

``````\hyperlink {topofpage.\arabic {chChapToc}}{foobar}
``````