可以使用 替换空行\let\par\mycommand
。有没有办法用制表符做同样的事情?我试过了,\let\>\mycommand
但没有用。
(我用它来替换 pdfcomment 包中的注释命令,请参阅如何用换行符替换空白行?。
编辑
以下是我尝试过的一个例子:
\documentclass{article}
\usepackage{pdfcomment}
\newcommand\mypdfcomment[2][]{{%
\let\>\textHT
\pdfcomment[#1]{#2}%
}}
\begin{document}
\mypdfcomment{before<tab>after}
\end{document}
通过键盘插入真正的制表位在哪里<tab>
。(不幸的是,stackexchange 似乎不允许在代码中使用真正的制表位。)
答案1
制表符的类别代码可以更改。例如,可以将其激活并定义为宏:
\documentclass{article}
\usepackage{pdfcomment}
\newcommand*\mypdfcomment[1][]{%
\begingroup
\begingroup
\lccode`\~=9\relax
\lowercase{%
\endgroup
\def~%
}{\textHT}%
\catcode9=\active
\mypdfcommentAux{#1}%
}
\newcommand\mypdfcommentAux[2]{%
\let\par\textCR
\pdfcomment[{#1}]{#2}%
\endgroup
}
\begin{document}
\mypdfcomment{%
before after
new line%
}
\end{document}
如果只想保留注释中的水平制表符,那么可以将其设置为类别代码 12(其他),如数字和标点符号:
\documentclass{article}
\usepackage{pdfcomment}
\newcommand*\mypdfcomment[1][]{%
\begingroup
\catcode9=12\relax
\mypdfcommentAux{#1}%
}
\newcommand\mypdfcommentAux[2]{%
\let\par\textCR
\pdfcomment[{#1}]{#2}%
\endgroup
}
\begin{document}
\mypdfcomment{%
before after
new line%
}
\end{document}
before
在这两种情况下,和之间的空格after
都是水平制表符(字符代码 9)。
\mypdfcomment
如果将带有参数的参数放入另一个宏的参数中,类别更改不起作用。
更新:添加了对注释文本内空行的支持。
答案2
在文档的序言中,定义
\catcode`\^^09=\active
\def^^09{\leavevmode\hskip2em}
^^09
是十六进制代码为 09 的字符,通常为制表符。因此,第一个命令使该字符“活跃”,即赋予其类别代码 13,以便可以将其用作宏名称。
然后,第二条命令定义了一个新宏,以制表符作为宏名(在此示例中插入 2em 宽度的空格)。您也可以直接使用制表符代替^^09
,但在我看来,这样更难阅读。
无论何时,当您在文档中使用制表符时,TeX 都会将其视为宏并将其扩展,就像对以 开头的“普通”宏名称进行扩展一样\
。