我正在使用以下代码
\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
变成"
了简写字符,所以从nomencl
2.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
,而不是手动操作。