命名环境中的阶乘问题

命名环境中的阶乘问题

我正在使用以下代码

\documentclass{article}
\usepackage{nomencl}
\makenomenclature
\renewcommand{\nomname}{List of Abbreviations}

\begin{document}

\addcontentsline{toc}{section}{List of Abbreviations}

\nomenclature{\(\mathbb N_r\)}{Set of all positive integers greater than or equal to $r!$}

\printnomenclature

\end{document}

但出于某种原因,我无法使上面的阶乘工作。“!”将句子推到下一行。任何解决此问题的建议都值得赞赏。谢谢!

答案1

嘿哟!

首先,您的 MWE 无法编译,因为\mathbb需要amssymb包。

现在回答你的实际问题,问题是:nomencl 包不允许在键中使用感叹号

解决方法1:

正如链接问题所建议的,您可以通过转义感叹号来解决这个问题:

\nomenclature{\(\mathbb{N}\)}{Set of all positive integers greater than or equal to \(r%!\)}

然而,这会破坏 Overleaf 中的语法高亮并引发错误(即使它编译得很好)。

解决方法 #2

在序言中添加以下内容:

\newcommand{\bang}{\mathrm{!}}

进而

\nomenclature{\(\mathbb{N}\)}{Set of all positive integers greater than or equal to \(r\bang\)}

这不会破坏 Overleaf 中的语法高亮。请参阅\mathrm 和 \operatorname 之间有什么区别?以获得 的解释\mathrm

答案2

该包nomencl依赖于makeindex对命名法条目进行排序和处理。

由于makeindex该字符!比较特殊,因此在传递给它的材料中应该对其进行引用。 中的“引用”是什么意思makeindex

makeindex在这种情况下,样式文件可能nomencl.ist包含如下行

quote "%"

如果quote样式文件中没有行,则默认值为makeindex"您可以输入以下内容

\nomenclature{\(\mathbb{N}_{r}\)}{Set of all positive integers greater than or equal to $r"!$}

这让德国用户很恼火,因为babel变成"了简写字符,所以从nomencl2.5 版开始nomencl.ist,文件包含

quote '%'

(可以使用双引号或单引号来隔离字符串)。因此,您可以输入以下内容

\nomenclature{\(\mathbb{N}_{r}\)}{Set of all positive integers greater than or equal to $r%!$}

但是,这当然会破坏编辑器的语法着色/检查(特别是 Overleaf 中尝试动态检查语法的编辑器)。即使该点被标记为“错误”,LaTeX 运行也会很好。

我们可以做的是在将参数传递给 之前替换其中的特殊字符\nomenclature。您可以判断这是否值得付出努力。代码中的[\!\@]代表我们要用 引用的特殊字符列表%

% arara: pdflatex
% arara: nomencl
% arara: pdflatex

\documentclass{article}
\usepackage[intoc]{nomencl}
\usepackage{amssymb}

\makenomenclature
\renewcommand{\nomname}{List of Abbreviations}

\ExplSyntaxOn

\NewCommandCopy{\originalnomenclature}{\nomenclature}
\RenewDocumentCommand{\nomenclature}{O{}mm}
 {
  \shaya_nomencl:nnn { #1 } { #2 } { #3 }
 }

\tl_new:N \l_shaya_nomencl_one_tl
\tl_new:N \l_shaya_nomencl_two_tl

\cs_new_protected:Nn \shaya_nomencl:nnn
 {
  \tl_set:Nn \l_shaya_nomencl_one_tl { #2 }
  \tl_set:Nn \l_shaya_nomencl_two_tl { #3 }
  \regex_replace_all:nnN { [\!\@] } { \cO\%\0 } \l_shaya_nomencl_one_tl
  \regex_replace_all:nnN { [\!\@] } { \cO\%\0 } \l_shaya_nomencl_two_tl
  \__shaya_nomencl:nVV { #1 } \l_shaya_nomencl_one_tl \l_shaya_nomencl_two_tl
 }
\cs_new_protected:Nn \__shaya_nomencl:nnn
 {
  \originalnomenclature[#1]{#2}{#3}
 }
\cs_generate_variant:Nn \__shaya_nomencl:nnn { nVV }

\ExplSyntaxOff

\begin{document}

\tableofcontents

\section{Introduction}

Some text

\nomenclature{\(\mathbb{N}_{r}\)}{Set of all positive integers greater than or equal to $r!$}

\printnomenclature

\end{document}

请注意,这\mathbb N不是输入符号的最佳方式,而应该是\mathbb{N}。此外,如果您想在目录中插入术语,请使用选项intoc,而不是手动操作。

在此处输入图片描述

相关内容