当寻找吞噬所有后续空行的命令,我想知道是否可以为该命令定义一个由一个字符组成的快捷方式。
是否可以为字符分配执行§
某个命令(例如)的特殊语义?\fancystuff
\documentclass{article}
\newcommand\fancystuff{\do\some\fancy\stuff\here}
% How to assign to § the semantics of \fancystuff ?
\begin{document}
This is text. But the following character §
gets fancy stuff done.
\end{document}
答案1
当输入编码为Latin-1时,所代表的字节§
已经处于活动状态,因此您需要做的就是改变其含义。
% -*- coding: latin-1 -*-
\documentclass{article}
\usepackage[latin1]{inputenc}
\newcommand{\fancystuff}{\textit{Whatever}}
\protected\def§{\fancystuff}
\begin{document}
\section{The fancy § works also in section titles!}
Here's an example of §.
\end{document}
这\protected\def
是为了确保字符在辅助文件中以其自身形式写入。
如果您使用 UTF-8 作为编码,则可以使用以下命令获得相同的结果newunicodechar
:
% -*- coding: utf-8 -*-
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
\DeclareRobustCommand{\fancystuff}{\textit{Whatever}}
\newunicodechar{§}{\fancystuff}
\begin{document}
\section{The fancy §{} works also in section titles!}
Here's an example of §.
\end{document}
在这种情况\protected\def§
下不是工作,或者更确切地说,会产生错误的结果。然而角色将不是在辅助文件中将其本身写入。
是否使用\DeclareRobustCommand
取决于应该做什么§
;如果您不打算在“脆弱”环境中使用它,那么可能\newcommand
更好。
答案2
由于 § 不是 ASCII 字符,因此您可以使用 Unicode。
此处 § 在 Unicode 的 Latin-1 补充代码页中具有代码 U+00A7。
\documentclass{article}
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{00A7}{fancystuff}
\begin{document}
§
\end{document}
这应该打印fancystuff
或打印您作为命令的第二个参数提供的任何命令的结果\DeclareUnicodeCharacter
。
答案3
这在 TeX 世界中被称为“活动字符”。该过程概述如下这篇 TeX FAQ 文章,可以总结如下:
- 使角色活跃
\def
做任何你想做的事
以下 MWE 实现了这一点(使用 @ 而不是 § 作为特殊字符,以避免编码问题):
\documentclass{article}
\pagestyle{empty}
\newcommand\fancystuff{\textbf{(pondering over fancy stuff)}}
\catcode`\@=\active
\def@{\fancystuff}
\begin{document}
This is text. But the following character @
gets fancy stuff done.
\end{document}