如何用其他命令代替 tab?

如何用其他命令代替 tab?

可以使用 替换空行\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 都会将其视为宏并将其扩展,就像对以 开头的“普通”宏名称进行扩展一样\

相关内容