词汇表和 mylatexformat 不兼容?

词汇表和 mylatexformat 不兼容?

我尝试使用 mylatexformat 来加快包含许多软件包的大序言的速度。但我遇到了很多错误,其中大部分来自词汇表软件包。

我的 MWE:

\documentclass[11pt,onecolumn,twoside,draft,titlepage,fleqn,a4paper,openright]{book} 
\usepackage{titlesec}
\usepackage{longtable}
\usepackage{makeidx}
\usepackage[nonumberlist, acronym, toc, section, shortcuts, nopostdot, nogroupskip]{glossaries}
\renewcommand*{\arraystretch}{1.3}  % sets the line indent in glossaries
\setlength{\glsdescwidth}{12.5cm}   
\setlength\LTleft{0pt}
\endofdump

\newglossary[slg]{symbols}{syi}{syg}{Nomenclature}
\newglossary[ilg]{indices}{iyi}{iyg}{List of indices}
\makeglossaries

\newacronym{ECD}{ECD}{equivalent circuit diagram}
\newacronym{RES}{RES}{renewable energy source}
\newglossaryentry{Rx1}
{
  name={\ensuremath{R_{x1}}},
  description={Equivalent series resistance},
  sort=Rx1, type=symbols
}
\newglossaryentry{ref}
{
  name={*},
  description={Indicates reference value},
  sort=ref, type=indices
}

\begin{document}
\glsaddall                                
\printglossary[type=\acronymtype, style=long, title=List of Abbreviations and Acronyms]
\printglossary[type=symbols, style=long, title=Nomenclature]
\printglossary[type=indices, style=long, title=List of indices]

\section*{Sample}
\begin{longtable}{ll}
Some & Text
\end{longtable}
\gls{ref}, \gls{ECD}, \gls{Rx1}
\end{document}

\endofdump 命令禁止“正常”使用 Latex,因此在正常运行时应将其注释掉。但对于 mylatexformat 来说,它是必需的,它应该从终端启动(在与 *.tex 文件相同的文件夹中打开)。我在终端中输入了 makeformat 手册中提供的命令:

etex -initialize -save-size=20000 -stack-size=20000 -jobname="mlt" "&pdflatex" mylatexformat.ltx """mlt.tex"""

其中 mlt.tex 是 *.tex 文件的名称,也是假定的 *.fmt 文件的名称 (-jobname="mlt")。我有 *.fmt 文件 mlt.fmt,但当我尝试包含它时(通过 mlt.tex 第一行中的 %&mlt),我没有得到任何结果(并且有很多错误)。

我还尝试了一个没有词汇表的示例(即包含了许多其他包,但没有这个),并且成功了。

答案1

让我知道如何以更美观的方式来展示这一点。

我也喜欢快速高效的组合。与 mylatexformat 的组合很棘手,但仍然很棒。软件包文档看起来像是 mylatex 的糟糕副本,需要更新。

我将词汇表包(使用 makeglossaries 命令)视为动态构建。因此我按照以下说明进行操作: http://www.howtotex.com/tips-tricks/faster-latex-part-iv-use-a-precompiled-preamble/ 他们建议将 minitoc 等软件包放在命令之后\结束转储对我来说,将工作分成两个单独的文件会更容易。我不喜欢取消/注释一行并以不同的方式编译同一个文件的想法第一个文件应该使用命令进行预编译:

pdftex -ini -jobname="fastformat" "&pdflatex" mylatexformat.ltx """example with a space.tex"""

此名称有 3 个引号除非文档中有空格。(但有时适用于 OS 系统)文件 example1.tex 具有以下内容

\documentclass{article}
% Add here more pacakges
\usepackage{hyperref}
% add here those packages after hyperref

% 'saves' everything above into one precompiled preamble
\endofdump
%% or
%\csname endofdump\endcsname

% No glossaries needed here. You could though. They shouldn't be read

\begin{document}
\noindent
Hola.
This shouldn't be read either on the precompilation
It does work if you comment the endofdump command 
and compile normally with pdflatex
Done
\end{document}

现在,编译信息的第二个文件有词汇表组合AFTER A\结束转储。第二个文件应该只用常用命令编译,比如 pdflatex,但您可能想尝试 makeglossaries 以使词汇表工作。[我还没有用 makeindex 或 xindy 尝试过。]

%&fastformat
% the name above should match the name on the precompilation.

\endofdump
%add packages taht have problem with mylatexformat
%\usepackage{minitoc}

\usepackage[acronym]{glossaries}
\makeglossaries
\input{dictionary} % dictionary.tex is the file with glossary and acronyms

\begin{document}
\noindent
First use \gls{api}\    subsequent \gls{api}
\newpage


\printglossary[type=\acronymtype]
%%% \newpage just to demonstrate that links are correct
\newpage
\printglossary[type=main]

\end{document}

这是我在 tex.stackexchange 某处找到的词汇表文件的最后一个例子

因为我使用了 hyperref,所以所有词汇表调用都应该有一个超链接。您可以删除 hyperref,但这样您可能会丢失整个文档中的所有其他超链接。

运行一次,编译两次,重启三次。完成

相关内容