制作一个 \code{...} 宏,尽可能地削弱特殊字符

制作一个 \code{...} 宏,尽可能地削弱特殊字符

这与简化词汇表描述中“&”符号的使用,但阅读了这些答案并尝试了一些基于它们的办法后,我发现它仍然不适合我的情况。

基本上,我试图制作一个以等宽字体内\code{...}联排版的宏。我想我正在寻找与 WEB语法非常相似的东西,只是对于我的目的来说,这是一个相当糟糕的分隔符选择。...|...||

例如我想要这个:

To capture a reference to the local variable \code{snake_case},
we write \code{[&snake_case]}.

排版就像我写的一样

To capture a reference to the local variable \texttt{snake\_case},
we write \texttt{[\&snake\_case]}.

我要写一篇很多内联代码片段,所以如果可以避免的话,我宁愿不必记住对任何特殊字符进行反斜杠转义。

我迄今为止的尝试是:

% make _ a non-special character
\usepackage{underscore}

% make & a non-special character
\newcommand{\makeampletter}{\catcode`\&=12\relax}
\newcommand{\makeampother}{\catcode`\&=4\relax}

\newcommand{\code}[1]{\makeampletter\texttt{#1}\makeampother}

我隐约知道存在\verb|...|,但答案如下何时应使用 \verb,何时应使用 \texttt让我对它保持警惕;我宁愿使用一些尽可能相似的东西\texttt,并且当我使用它时我 100% 了解我是如何偏离的\texttt

(加分项不仅在于修复了我的 & 符号问题,还在于解决了我将来不可避免的%{和问题}。)

答案1

感谢 Werner 对此的评论:

\newcommand{\code}[1]{\lstinline[basicstyle=\ttfamily,autodedent=0]{#1}}

(请注意autodedentJubobs 的lstautodedent包裹

我唯一剩下的问题与\code换行有关。即,

  • 有时我会看到foo, \code{bar}, baz“bar”和“,”之间的换行符
  • 有时我会看到\code{foo, bar, baz}“bar”和“,”之间的换行符

前者是站不住脚的,而后者至少是站得住脚的,即使它很丑陋。我觉得我可以做一些事情来改进这些方面的答案。

相关内容