如何将字符转换为 ascii 代码?

如何将字符转换为 ascii 代码?

我有一个自定义枚举器:

\newenvironment{subp}{%
  \begin{enumerate}[label={\textsc{\alph*.}}]
}{\end{enumerate}}

在环境中有时我需要跳到特定的标签,我会这样做:

\begin{subp}
  \setcounter{enumi}{1} % b
  \item blah blah

  \setcounter{enumi}{4} % e
  \item blah blah
\end

因为标签是字母,而计数器是数字计数的。

我希望我可以编写一个如下所示的宏:

\newcommand{\setcurrentlabel}[1]{\setcounter{enumi}{\toascii{#1}-\toascii{a}}

也许有一些转换宏的\toascii作用就像ord(x)python中的函数一样。所以我可以直接使用,这比手动用数字\setcurrentlabel{b}设置更清楚。enumi

答案1

反引号可用于获取数字上下文中的字符代码:

`a or `\a

可以通过以下示例提供数值上下文,\number或者使用 e-TeX\numexpr进行减法。

\documentclass{article}

\newcommand*{\setcurrentlabel}[1]{\setcounter{enumi}{\numexpr`#1-`a\relax}}

\begin{document}
\renewcommand*{\theenumi}{\alph{enumi}}
\begin{enumerate}
  \setcurrentlabel{b}
  \item blah blah

  \setcurrentlabel{e}
  \item blah blah
\end{enumerate}
\end{document}

结果

另一种选择是包calc

\usepackage{calc}
\newcommand*{\setcurrentlabel}[1]{\setcounter{enumi}{`#1-`a}}

答案2

对于设置数字标签的努力,您可能还会使用通常支持的可选参数\item

在此处输入图片描述

\documentclass{article}

\usepackage{enumitem,xparse}

\NewDocumentCommand{\fixeditem}{o}{%
  \IfNoValueTF{#1}
    {\item}% \fixeditem
    {\item[\scshape #1.]}% \fixeditem[..]
}

\newlist{subp}{enumerate}{1}
\setlist[subp]{label={\textsc{\alph*.}}}

\begin{document}

\begin{subp}
  \item blah blah

  \fixeditem[b] blah blah

  \fixeditem[e] blah blah
\end{subp}

\end{document}

上述方法的唯一缺点是当您将\items 与\fixeditems 混合时,列表枚举将不会在 之后继续按顺序进行\fixeditem

相关内容