自定义词汇表环境改进

自定义词汇表环境改进

这是有关 Nicola Talbot 在此问题中提供的代码的后续问题: 自动生成公式关键词

TL;DR:定义新环境 alignglos 可以用来包裹 align 环境。如果你碰巧将方程符号定义为词汇表条目,你可以在所述方程中使用(或更好地引用)它们来生成一个迷你词汇表,其中引用的符号位于键中

到目前为止一切顺利。如果您复制粘贴 N. Talbot 的代码 (MWE),它可以很好地编译。我尝试将该解决方案纳入我的论文中,其中包含了更多软件包。不知何故,功能被破坏了。我不知道这是由于软件包还是由于用于生成密钥的代码。我在使用代码时发现的一些问题是:

  1. 使用toc词汇表包中的选项会创建一个不需要的条目(setting title={}仅消除文本)

  2. 我使用hyperref来生成词汇表中的链接页码,因此在 之前加载包glossaries。即使所有alignglos环境都被注释掉,也会出现一个参考警告:name{alignsglos.0} has been referenced but does not existalignglos文档中的一个或多个环境会导致更多警告。

  3. 所有词汇表number list的都乱了套。只能找到第 0 页条目(未alignglos使用环境)和第 1 页和第 2 页条目(如果使用的话)。

  4. 取消注释第 225、230、234 和 238 行上的前两个alignglos环境会产生所需的结果(除了上面列出的内容)。取消注释第alignglos250、255、260、265 行上的其他环境会导致编译器错误,这让我很恼火。

  5. 仅当您首先编译没有环境的文档时才会发生这种情况alignglos不仅alignglos会打印出里面引用的元素,还会打印出符号词汇表中所有引用的条目。

MWE 在 github 上托管为要旨有错误的 MWE(注:文件编码-ansi,开始{document}-line 218,包文件内容-使用)


选修的:仅供参考,这里是我之前提到的大型文档的链接,但这个链接alignglos也不起作用。这是一个 GitHub 存储库。使用以下命令克隆:

git 克隆[电子邮件保护]:tairun/hslu.bda2013.git ~

用作BDA_Doku_main.tex项目文件并用 进行编译pdflatex and makeglossaries+biblatex (with biber)。所有文件都应在 中编码ansi。目录./sty/处理所有包和用户定义的内容,例如alignglos环境。其余的只是内容。MWE 中显示的方程式可以在 中找到./tex/loesungsfindung.tex > line 12。输出约为 50 页(A4)。相同的方程式现在位于第 37 页左右。

答案1

问题在于symbol词汇表需要主列表的页面位置列表,这与环境alignglos使用的位置列表相冲突alignglos。我认为最简单的解决方案是创建两个符号词汇表,一个用于存储页面列表,另一个用于存储对齐列表。以下 MWE 就是这样做的:

% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{array}
\usepackage{amsmath}
\usepackage{etoolbox}
\usepackage{color}
\usepackage[left=3.0cm,right=3.0cm,top=2.5cm,bottom=2cm,includeheadfoot]{geometry}
\usepackage[hidelinks,colorlinks=false,linkcolor=black,bookmarksnumbered=true]{hyperref}
\usepackage[acronym,toc,nogroupskip]{glossaries}
\newglossary[slg]{symbols}{slm}{sbl}{Symbolverzeichnis}
\newglossary[slg2]{symbols2}{slm2}{sbl2}{Symbolverzeichnis2}[alignglos]

\newacronym{sia}{SIA}{Schweizerischer Ingenieur- und
Architektenverein}
\newacronym{www}{WWW}{World Wide Web}
\newacronym{bhkw}{BHKW}{Blockheizkraftwerk}
\newacronym{wkk}{WKK}{Wärmekraftkopplung}

\newglossaryentry{erntefaktor}{
name=Erntefaktor,
description={Der Erntefaktor beschreibt das Verhältnis der genutzten
Energie zur investierten Energie. Im Falle von Kraftwerken ist meist
Elektrizität (allgemein Exergie), während die im Anlagenlebenszyklus
aufgewandte Graue Energie beschreibt, die im Idealfall auch als
Exergie angegeben werden sollte. wird auch als kumulierter
Energieaufwand bezeichnet.}
}

\newglossaryentry{degradation}{
name=Degradation,
description={Alterungsbedingte Änderung der Parameter von
Halbleiterbauteilen. Im Falle von Photovoltaikzellen: Rückgang des
Wirkungsgrades im Laufe ihrer Einsatzdauer.}
}

\newcommand{\newsymbolentry}[2]{%
  \newglossaryentry{sym:#1}{type=symbols,#2}%
  \newglossaryentry{sym2:#1}{type=symbols2,#2}%
}

\newsymbolentry{etadegr}{
name={\ensuremath{\eta_{\mathrm{Deg},r}}},
description={Verbleibender Wirkungsgrad bezogen auf den
ursprünglichen Wirkungsgrad},
user1=\ensuremath{\%},
sort=eta deg rest
}

\newsymbolentry{tau}{
name={\ensuremath{\tau}},
description={Lebenszyklus / Einsatzdauer des betrachteten Systems},
user1=a,
sort=tau
}

\newsymbolentry{deg}{
name={\ensuremath{\dot{D}}},
description={Prozentuale jährliche Abnahme des Wirkungsgrades},
user1={\ensuremath{\%/a}},
sort=deg
}

%Columntypes I use (also in glossarystyles tabx3col and tabx4col)
\newcolumntype{Z}[1]{>{\raggedright \arraybackslash}m{#1}}
\newcolumntype{Q}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{Y}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{L}{>{\small \raggedright \arraybackslash}X}
\newcolumntype{C}{>{\small \centering \arraybackslash}X}
\newcolumntype{R}{>{\small \raggedleft \arraybackslash}X}

\def\ignoresetentrycounter[#1]#2{}%

\newglossarystyle{alignglos}%
{%
\renewcommand{\glsgroupskip}{}%
\renewcommand{\glossaryheader}{}%
\renewcommand{\glsgroupheading}[1]{}%
\renewenvironment{theglossary}%
{\begin{tabular}{@{}p{1cm}p{0.9\textwidth}}}%
{\end{tabular}}%
\renewcommand*{\glsnumberformat}[1]{##1}%
\renewcommand*{\delimR}{-}%
\renewcommand*{\delimN}{,}%
\renewcommand*{\glossaryentryfield}[5]{%
\let\glossaryentrynumbers\stripentrynumbers
\let\setentrycounter\ignoresetentrycounter
\edef\doifinloclist{\noexpand\ifinloclist{\thealignglos}{##5}}%
\doifinloclist
{%
\items{##1}{##3}%
}%
}%
\renewcommand*{\glossarysubentryfield}[1]{\glossaryentryfield}%
}

\newglossarystyle{tabx3col}{%
% put the glossary in a longtable environment:
\renewenvironment{theglossary}%
{\begin{longtable}{@{}p{0.2\textwidth}@{}p{0.6\textwidth}@{}Y{0.2\textwidth}@{}}}%
{\end{longtable}}%
% Set the table's header:
\renewcommand*{\glossaryheader}{}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Main (level 0) entries displayed in a row:
\renewcommand*{\glossaryentryfield}[5]{%
\glstarget{##1}{##2}% Name
& ##3% Description
& ##5% Page list
\\% end of row
}%
%%Sub entries treated the same as level 0 entries:
%\renewcommand*{\glossarysubentryfield}[6]{%
%\glossaryentryfield{##2}{##3}{##5}{##6}}%
%% Nothing between groups:
%\renewcommand*{\glsgroupskip}{}%
}

\newglossarystyle{tabx4col}{%
% put the glossary in a longtable environment:
\renewenvironment{theglossary}%
{\begin{longtable}{@{}p{0.1\textwidth}@{}Z{0.1\textwidth}@{}p{0.6\textwidth}@{}Y{0.2\textwidth}@{}}}%
{\end{longtable}}%
% Set the table's header:
\renewcommand*{\glossaryheader}{}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Main (level 0) entries displayed in a row:
\renewcommand*{\glossaryentryfield}[5]{%
\glstarget{##1}{##2}% Name
& \glsentryuseri{##1}% Units
& ##3% Description
& ##5% Page list
\\% end of row
}%
% Sub entries treated the same as level 0 entries:
%\renewcommand*{\glossarysubentryfield}[6]{%
%\glossaryentryfield{##2}{##3}{##5}{##6}}%
%% Nothing between groups:
%\renewcommand*{\glsgroupskip}{}%
}

\makeglossaries

\newcommand{\items}[2]{\glstext*{#1} & #2 [\glsuseri*{#1}] \\}

% Commands I don't understand but are needed
% ---------------------------------

% clean up the format of the location list
\newcommand{\stripentrynumbers}[1]{%
\striprelax#1\endstriprelax
}

\newcommand{\ifinloclist}[3]{%
\renewcommand*{\do}[1]{%
\let\dolistbreak\relax
\doifinloc{#1}{#3}##1-\relax\endrange
\dolistbreak
}%
\docsvlist{#2}%
}

\def\doifinloc#1#2#3-#4\endrange{%
\ifx\relax#4\relax
% just a number
\ifnum#1=#3\relax
#2%
\let\dolistbreak\listbreak
\fi
\else
\doifinrange{#1}{#2}#3-#4%
\fi
}

\def\doifinrange#1#2#3-#4-\relax{%
\ifnum#1=#3\relax
#2%
\let\dolistbreak\listbreak
\else
\ifnum#1=#4\relax
#2%
\let\dolistbreak\listbreak
\else
\ifnum#1>#3\relax
\ifnum#1<#4\relax
#2%
\let\dolistbreak\listbreak
\fi
\fi
\fi
\fi
}

\def\striprelax\relax#1\endstriprelax{#1}


\newcounter{alignglos}

\newcommand{\sym}[2][]{\gls[#1]{sym:#2}}%

\newenvironment{alignglos}%
{\stepcounter{alignglos}%
 \renewcommand{\sym}[2][]{\glsadd[##1]{sym2:##2}\gls[##1]{sym:##2}}%
}%
{%
\glstocfalse
\renewcommand{\glossarysection}[2][]{}%
\printglossary[type=symbols2,style=alignglos]
}

%-----------------------------------------------------------------------------

\begin{document}

\tableofcontents
\vspace{2em}

Reference to equation \ref{eq:deg1} and eq. \ref{eq:deg2}

\begin{alignglos}
\begin{align}
\sym{deg} &= \frac{1-\sym{etadegr}}{\sym{tau}}
\label{eq:deg1}\\
\sym{deg} &= \frac{1-\sym{etadegr}}{\sym{tau}}
\label{eq:deg2}
\end{align}
\end{alignglos}

\vspace{2em}

\begin{alignglos}
\begin{align}
\sym{tau} &= \ldots
\end{align}
\end{alignglos}
\newpage

\gls{bhkw}, \gls{sia}

\textcolor[rgb]{1,1,1}{\lipsum[1-20]}

\gls{www}, \gls{wkk}
\gls{erntefaktor}, \gls{degradation}

Reference to equation \ref{eq:deg3} and eq. \ref{eq:deg4}

\begin{alignglos}
\begin{align}
\sym{deg} &= \frac{1-\sym{etadegr}}{\sym{tau}}
\label{eq:deg3}\\
\sym{deg} &= \frac{1-\sym{etadegr}}{\sym{tau}}
\label{eq:deg4}
\end{align}
\end{alignglos}

\newpage

More Test Text... More Test Text... More Test Text... More Test
Text... More Test Text...

\begin{alignglos}
\begin{align}
\sym{deg} &= \frac{1-\sym{etadegr}}{\sym{tau}}
\label{eq:deg5}\\
\sym{deg} &= \frac{1-\sym{etadegr}}{\sym{tau}}
\label{eq:deg6}
\end{align}
\end{alignglos}

\newpage
\printglossary[type=\acronymtype,style=tabx3col,title=Abbrev]
\printglossary[type=symbols,style=tabx4col,title=Symbols]
\printglossary[style=tabx3col,title=Glossary]

\end{document}

(我必须切换到utf8输入编码,因为 ansi 对我来说不起作用。)

相关内容