内联环境快捷方式(如 $blah$)

内联环境快捷方式(如 $blah$)

我希望能够使用等宽字体来格式化代码。我现在正在使用,\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}

在此处输入图片描述

相关内容