我有一个文档,其中包含Verbatim
环境中的示例程序代码。打字产生的插入符号^
对我来说太平了,所以我定义了一个宏来产生更清晰的版本。
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{fancyvrb}
%A more wedge-like caret for use in code.
\newcommand\pow{\hspace{-1pt}\raisebox{-1pt}{\scalebox{1.2}{\textsf{\textasciicircum}}}\hspace{-1pt}}
%Set up code environment
\DefineVerbatimEnvironment{code}{Verbatim}{xleftmargin=12pt,xrightmargin=12pt,commandchars=\\\{\}}
\begin{document}
\begin{code}
y = x^2
y = x\pow2
\end{code}
\end{document}
不幸的是,在代码示例中,我们很容易忘记使用\pow
和 的必要性^
。因此,我希望进行设置,以便^
在code
环境中输入 会产生 的结果\pow
。如何实现这一点?
答案1
我确信你会欣赏这个狡猾的技巧:
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{fancyvrb}
%A more wedge-like caret for use in code.
\newcommand\pow{%
\hspace{-1pt}%
\raisebox{-1pt}{\scalebox{1.2}{\textsf{\textasciicircum}}}%
\hspace{-1pt}%
}
\newcommand{\makehatpow}{%
\begingroup\lccode`~=`^
\lowercase{\endgroup\let~}\pow
\catcode`^=\active
}
%Set up code environment
\DefineVerbatimEnvironment{code}{Verbatim}{
xleftmargin=12pt,
xrightmargin=12pt,
commandchars=\\\{\},
codes={\makehatpow},
}
\begin{document}
\begin{code}
y = x^2
y = x\pow2
\end{code}
\end{document}
键codes
应包含在执行通常的逐字类别代码分配之前执行的代码。幸运的是,^
在逐字环境(如>
或)中并不特殊,因此我们可以将其设置为活动状态,但在使其活动之前,我们(本地)使用老办法`
为活动状态定义一个含义。请参阅^
\begingroup\lccode`~=...
这个答案或者我的了解更多信息。