我正在尝试以下操作:
\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}
它也能进行完全扩展,但不会从中生成控制序列名称。