我希望能够使用等宽字体来格式化代码。我现在正在使用,\texttt{}
但到处输入这种字体有点麻烦。有没有办法改用快捷方式?例如,对于数学,您可以将其包装在 $ 中。因此,就我的情况而言,我希望能够编写类似以下内容的内容:
`const WIDTH = 5`
并将其变成:
const WIDTH = 5
我尝试寻找快捷方式(它给了我一堆编辑器的东西)、新命令(它告诉我如何定义一个新的反斜杠命令)和宏(我并不真正理解但不是我想要的)。
答案1
您可以将其转换|
为内联逐字,如下doc.sty
所示:
\documentclass[]{article}
\makeatletter
%Shamelessly copied from doc.sty
\def\MakeShortVerb{%>>>
\@ifstar
{\def\@shortvrbdef{\verb*}\@MakeShortVerb}%
{\def\@shortvrbdef{\verb}\@MakeShortVerb}}%<<<
\def\@MakeShortVerb#1{%>>>
\expandafter\ifx\csname cc\string#1\endcsname\relax
\@shortvrbinfo{Made }{#1}\@shortvrbdef
\add@special{#1}%
\expandafter
\xdef\csname cc\string#1\endcsname{\the\catcode`#1}%
\begingroup
\catcode`\~\active \lccode`\~`#1%
\lowercase{%
\global\expandafter\let
\csname ac\string#1\endcsname~%
\expandafter\gdef\expandafter~\expandafter{\@shortvrbdef~}}%
\endgroup
\global\catcode`#1\active
\else
\@shortvrbinfo\@empty{#1 already}{\@empty\verb(*)}%
\fi}%<<<
\def\DeleteShortVerb#1{%>>>
\expandafter\ifx\csname cc\string#1\endcsname\relax
\@shortvrbinfo\@empty{#1 not}{\@empty\verb(*)}%
\else
\@shortvrbinfo{Deleted }{#1 as}{\@empty\verb(*)}%
\rem@special{#1}%
\global\catcode`#1\csname cc\string#1\endcsname
\global \expandafter\let \csname cc\string#1\endcsname \relax
\ifnum\catcode`#1=\active
\begingroup
\catcode`\~\active \lccode`\~`#1%
\lowercase{%
\global\expandafter\let\expandafter~%
\csname ac\string#1\endcsname}%
\endgroup \fi \fi}%<<<
\def\@shortvrbinfo#1#2#3{%>>>
\PackageInfo{doc}{%
#1\expandafter\@gobble\string#2 a short reference
for \expandafter\string#3}}%<<<
\def\add@special#1{%>>>
\rem@special{#1}%
\expandafter\gdef\expandafter\dospecials\expandafter
{\dospecials \do #1}%
\expandafter\gdef\expandafter\@sanitize\expandafter
{\@sanitize \@makeother #1}}%<<<
\def\rem@special#1{%>>>
\def\do##1{%
\ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
\xdef\dospecials{\dospecials}%
\begingroup
\def\@makeother##1{%
\ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
\xdef\@sanitize{\@sanitize}%
\endgroup}%<<<
\AtBeginDocument{\MakeShortVerb \|}
\AtEndDocument{\DeleteShortVerb \|}
\makeatother
\begin{document}
|Test|
but also |Test$_{}|
\end{document}
答案2
看起来您想要一个内联逐字环境。该fancyvrb
包提供了一种简单的方法来做到这一点。请注意,就像 Skillmon 的解决方案一样,您无法使用此方法将反引号定义为逐字分隔符。或者,如果您不喜欢一直打字,\texttt
您可以为其制作一个更短的替换宏。这里我使用了\vrb
。请注意版本如何fancyvrb
允许使用保留的 TeX 字符而无需转义;\texttt
解决方案不允许。
\documentclass{article}
\usepackage{fancyvrb}
\DefineShortVerb{\|}
\newcommand{\vrb}{\texttt}
\begin{document}
Using the |fancyvrb| |foo|
Using a macro |\vrb{foo}| \vrb{foo}
\end{document}
答案3
其实并不复杂,而且与其他提出的答案不同,对象可以作为另一个命令的参数。
因此类似的事情\mbox{`const WIDTH = 5`}
就会起作用。
\documentclass{article}
\makeatletter
% define the active backquote
\begingroup\lccode`~=``\lowercase{\endgroup
\def~#1~{\texttt{#1}}%
}
% delay activating at begin document
\AtBeginDocument{\catcode`\`=\active}
\makeatother
\begin{document}
This is \texttt{const WIDTH = 5}
This is `const WIDTH = 5`
\end{document}
请注意,它非常脆弱,找到缺失的反引号可能很困难。如果你用编辑器定义一些快捷方式,那就简单多了。
使用双反引号来表示逐字模式甚至更加脆弱(但是,双反引号不能用作另一个命令的参数,就像\verb
)。
\documentclass{article}
\makeatletter
% define the active backquote
\begingroup\lccode`~=``\lowercase{\endgroup
\def\jharodbackquote{\@ifnextchar~\jharodverb\jharodtt}
\def\jharodtt#1~{\texttt{#1}}
\let~\jharodbackquote
\def\jharodverb{\bgroup\catcode`\`=2 \verb}
}
% delay activating at begin document
\AtBeginDocument{\catcode`\`=\active}
\makeatother
\begin{document}
This is \mbox{`const WIDTH = 5`}
This is `const WIDTH = 5`
This is ``\verb{atim}``
This is `const WIDTH = 5`
\end{document}