Sharelatex 中的命名法和文档类别

Sharelatex 中的命名法和文档类别

我一直在尝试为 sharelatex.com 中的一个项目创建命名法,其中将书籍作为文档类别。命名法无法打印,也没有警告或错误。作为故障排除的一部分,我复制了该项目并摆弄了一会儿,最后才注意到,当我将文档类别更改为文章时,命名法出现了(更改为报告没有任何区别)。然后我将文档类别改回书籍,命名法仍然存在(!)。

之后,我在原始文档中做了同样的事情,但这次没有成功。我的问题是命名函数如何依赖于文档类别?

相关代码:

\documentclass[12pt,twoside]{book}
\usepackage[utf8]{inputenc}
\usepackage{nomencl}
\usepackage{etoolbox}
\makenomenclature

\begin{document}

\renewcommand\nomgroup[1]{%
\item[\bfseries
 \ifstrequal{#1}{S}{Symbols}{%
  \ifstrequal{#1}{T}{Subscripts}{%
  \ifstrequal{#1}{Y}{Abbreviations}{}}}%
]}
\nomenclature[S]{$MW$}{Molecular weight [kg/kmol]}
\nomenclature[T]{$1$}{Inlet}
\nomenclature[Y]{CL}{Control line}

\printnomenclature

\end{document}

答案1

您的示例不会产生任何输出,因为\nomenclature不会显示任何文本,并且\printnomenclature如果关联文件(需要通过创建makeindex)不存在则不会执行任何操作。

ShareLaTeX 失败并中断了整个构建过程,因为 的第一个实例上没有创建 PDF 文件pdflatex。如果您开始通过添加一些示例文本来修改文档,则构建过程可以完成并且 ShareLaTeX 将运行,makeindex从而创建 所需的文件\printnomenclature

如果您再次修改文档,删除插入的示例文本,所需的文件\printnomenclature仍然存在,因此可以输入,这意味着可以创建 PDF,因此 ShareLaTeX 的构建过程不会中断。如果您清除所有临时文件(包括所需的文件)\printnomenclature,则文档将再次变为空文件,构建过程无法完成。

最简单的做法就是在文档中添加一些文本,或者只是\mbox{}确保 PDF 至少包含一页:

\documentclass[12pt,twoside]{book}
\usepackage[utf8]{inputenc}
\usepackage{nomencl}
\usepackage{etoolbox}
\makenomenclature

\begin{document}
\renewcommand\nomgroup[1]{%
\item[\bfseries
 \ifstrequal{#1}{S}{Symbols}{%
  \ifstrequal{#1}{T}{Subscripts}{%
  \ifstrequal{#1}{Y}{Abbreviations}{}}}%
]}
\nomenclature[S]{$MW$}{Molecular weight [kg/kmol]}
\nomenclature[T]{$1$}{Inlet}
\nomenclature[Y]{CL}{Control line}

\printnomenclature

\mbox{}
\end{document}

ShareLaTeX 中显示的文档图像

ShareLaTeX 的一般信息nomencl

如果您单击“日志和输出文件”按钮(在“重新编译”按钮旁边突出显示),然后单击“其他日志和文件”下拉菜单,您将获得由 LaTeX 和(在本例中)创建的关联文件列表makeindex

ShareLaTeX 的日志和输出文件列表图片

与该包相关的文件nomencl有:

  • nlg创建的日志文件makeindex
  • nlo\makenomenclature由 的每个实例创建并写入的文件\nomenclature
  • nlsmakeindex由 编写并输入的命名法排版说明\printnomenclature。在此示例中,文件包含代码:

    \begin{thenomenclature} 
    
     \nomgroup{S}
    
      \item [{$MW$}]\begingroup Molecular weight [kg/kmol]\nomeqref {0}
            \nompageref{1}
    
     \nomgroup{T}
    
      \item [{$1$}]\begingroup Inlet\nomeqref {0}\nompageref{1}
    
     \nomgroup{Y}
    
      \item [{CL}]\begingroup Control line\nomeqref {0}\nompageref{1}
    
    \end{thenomenclature}
    

如果您更改文档类别,\printnomenclature仍会尝试输入nls与之前相同的文件。如果该文件尚未被删除或更改,则仍会输入。环境可能会thenomenclature因类别不同而略有不同(例如,使用\section*而不是\chapter*),这会改变命名法的显示方式,但它仍然是与之前相同的文件。

如果删除该nls文件,那么命名法将不再出现(因为\printnomenclature找不到该文件)。

文档构建过程如下(假设主文档文件名为main.tex):

pdflatex main
makeindex main.nlo -s nomencl.ist -o main.nls
pdflatex main

当您单击 ShareLaTeX 的“重新编译”按钮时,它将执行所有这三个步骤(假设您将编译器设置为pdflatex)。如果您的命名法未显示,请执行以下检查:

  1. 检查您是否已\makenomenclature在序言中。
  2. \nomenclature检查文档中是否有一个或多个。
  3. \printnomenclature检查文档中是否有该内容。
  4. 检查nlg文件是否有错误makeindex
  5. 检查nls文件是否存在并包含有效的 LaTeX 代码(\begin{thenomenclature}...\end{thenomenclature}一个或多个\item)。

您可以使用“其他日志和文件”下拉列表旁边的“清除缓存文件”按钮删除所有这些辅助文件。这将弹出一个确认框:

确认框图像

删除这些文件后,单击“重新编译”按钮重建文档,然后它们应该全部再次创建。

答案2

看来您的示例可以通过etoolbox包进行改进。以下代码Nomenclature在文章、书籍和报告文档类中生成。

\documentclass[12pt,twoside]{book}
\usepackage[utf8]{inputenc}
\usepackage{nomencl}
\makenomenclature

\usepackage{etoolbox}
\renewcommand\nomgroup[1]{%
\item[\bfseries
 \ifstrequal{#1}{S}{Symbols}{%
  \ifstrequal{#1}{T}{Subscripts}{%
  \ifstrequal{#1}{Y}{Abbreviations}{}}}%
]}

\begin{document}

\nomenclature[S]{$MW$}{Molecular weight [kg/kmol]}
\nomenclature[T]{$1$}{Inlet}
\nomenclature[Y]{CL}{Control line}

\printnomenclature

\end{document}

相关内容