连接宏、字符串和计数器

连接宏、字符串和计数器

我正在尝试以下操作:

\documentclass{article}
\newcounter{testcounter}
\def\teststring{begin}

\begin{document}
\stepcounter{testcounter}

\def\newstring{\expandafter\string\csname\teststring-middle-\thetestcounter\endcsname}

\thetestcounter

\teststring

\newstring

\end{document}

结果如下:

在此处输入图片描述

所以,我不知道“”来自哪里。上面的例子只是一个演示。连接的字符串 \newstring´´ 稍后将在 \label 命令中使用。

欢迎任何提示!

答案1

这只是 使用 OT1 编码打印的"字符,请尝试使用\

\usepackage[T1]{fontenc}

看到\

所以它确实是\并且可以在内部命令名称中这样使用。

但请注意,使用这样的字符串作为参数通常是不安全的,\label因为当\在写入辅助文件时它是无效的,而在读取辅助文件时它将被解释为转义字符。

答案2

当你这样做

\string\foo

控制序列名称被转换成字符列表(所有字符代码均为 12,除了可能保留类别代码 10 的空格)先于由具有与当前值相同的 ASCII 码的字符\escapechar(通常为 92,即反斜杠)。

当你这样做时\expandafter\string\csname<code>\endcsname,你首先从的完整扩展中创建一个标记<code>,然后像以前一样表示它;在你的例子中,你得到

\begin-middle-1

作为一串字符。

你可能想要的是

\edef\newstring{\teststring-middle-\thetestcounter}

它也能进行完全扩展,但不会从中生成控制序列名称。

相关内容