使用 \item 上的宏前缀更改项目文本的字体

使用 \item 上的宏前缀更改项目文本的字体

平均能量损失

\documentclass{article}

\usepackage{menukeys}
\usepackage{enumitem}
\usepackage{xcolor}

\newcommand\alternate{\color{gray}}
\newcommand\alternatereset{\color{black}}
\newcommand\keyify[1]{\keys{\ttfamily#1}}
\newlist{keylist}{description}{1}
\setlist[keylist]{
  labelindent = 2ex,
  itemsep     = -1ex,
  font        = \alternatereset\keyify,
  before      = \ttfamily\let\&\alternate
}

\begin{document}
\begin{keylist}
  \item[C-M-x]   cider-eval-defun-at-point
\&\item[C-c C-c] cider-eval-defun-at-point
  \item[C-c C-f] cider-pprint-eval-defun-at-point
\end{keylist}
\end{document}

输出

我希望第二个标签cider-eval-defun-at-point变灰。我\aftergroup之前尝试过使用\alternatereset,但\font无济于事——事实上,这会抵消效果\&(可能是因为标签位于组中)。

答案1

我们可以把 reset 添加到每个前面\item。这立即引发了一个问题:

\&\item[foo] bar                          & input syntax
\color{gray}\item[foo] bar                & \& is expanded
\color{gray}\color{black}\item[foo] bar   & \item is 'expanded'

每次我们都会立即重置颜色。那么我们如何解决这个问题呢?

我们可以定义\alternate吞噬并重新插入到\item正确的位置:

\def\alternate\item[#1]{\item[#1]\color{gray}}

这将我们的扩展变成:

\&\item[foo] bar                          & input syntax
\item[foo]\color{gray} bar                & \& is expanded
\color{black}\item[foo]\color{gray} bar   & \item is 'expanded'

这给了我们正确的序列。

完整 MWE

\documentclass{article}

\usepackage{menukeys}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage{xpatch}

\def\alternate\item[#1]{\item[#1]\color{gray}}
\newcommand\alternatereset{\color{black}}
\newcommand\keyify[1]{\keys{\ttfamily#1}}
\newlist{keylist}{description}{1}
\setlist[keylist]{
  labelindent = 2ex,
  itemsep     = -1ex,
  font        = \keyify,
  before      = \let\&\alternate
                \xpretocmd{\item}{\alternatereset}{}{}
                \ttfamily
}

\begin{document}
\begin{keylist}
  \item[C-M-x]   cider-eval-defun-at-point
\&\item[C-c C-c] cider-eval-defun-at-point
  \item[C-c C-f] cider-pprint-eval-defun-at-point
\end{keylist}
\end{document}

输出

相关内容