我正在寻找一种方法来自动创建图例equation
(比如说嵌入在align
环境中)。
我目前使用的是半自动化到全手动的方式。让我解释一下:结果应该是这样的:
。
为了实现这一目标,我需要 3 个步骤来生成上面显示的输出:
1)放置方程:
\begin{align}
\dot{D} = \frac{1-\eta_{Deg,r}}{\tau} \label{eq:deg}
\end{align}
2)定义符号词汇表中相应的条目:
\newglossaryentry{sym:deg}{
type=symbols,
name={$\dot{D}$},
description={Prozentuale jährliche Abnahme des Wirkungsgrades},
user1={\%/a},
sort=deg
}
\newglossaryentry{sym:etadegr}{
type=symbols,
name={$\eta_{Deg,r}$},
description={Verbleibender Wirkungsgrad bezogen auf den ursprünglichen Wirkungsgrad},
user1=\%,
sort=eta deg rest
}
\newglossaryentry{sym:tau}{
type=symbols,
name={$\tau$},
description={Lebenszyklus / Einsatzdauer des betrachteten Systems},
user1=a,
sort=tau
}
3)自定义命令用词汇表填充表格参考:
%Command
\newcommand{\items}[1]{\glstext*{#1} & \glsdesc*{#1} [\glsuseri*{#1}] \\}
%Legend Environment
\begin{tabular}{@{} p{1cm} p{0.9 \textwidth}}
\items{sym:deg}
\items{sym:etadegr}
\items{sym:tau}
\end{tabular}
问题
我想创建一个命令,在之前的align
环境中搜索我的元素symbol glossary
并将它们放入图例(在本例中为表格)环境中。这已经存在了吗(没有找到任何东西)?我该如何实现这一点?不指望一个完美的解决方案,但我不知道如何做到这一点。
可以在这里找到需要修改的 MWE -->要旨
€:
-附加信息:在 Windows 上使用 miktex 2.9 和 TechniXCenter 2。-
可以使用词汇表条目的名称键进行搜索匹配
答案1
这是一个可能的解决方案。它需要xindy
而不是makeindex
。如果你真的不想使用xindy
,可以调整代码,但这更复杂。
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage[counter=alignglos,xindy]{glossaries}
\newglossary[slg]{symbols}{slm}{sbl}{List of Symbols}
\GlsSetXdyMinRangeLength{0}
\makeglossaries
\newglossaryentry{sym:deg}{
type=symbols,
name={\ensuremath{\dot{D}}},
description={Prozentuale jährliche Abnahme des Wirkungsgrades},
user1={\%/a},
sort=deg
}
\newglossaryentry{sym:etadegr}{
type=symbols,
name={\ensuremath{\eta_{Deg,r}}},
description={Verbleibender Wirkungsgrad bezogen auf den
ursprünglichen Wirkungsgrad},
user1=\%,
sort=eta deg rest
}
\newglossaryentry{sym:tau}{
type=symbols,
name={\ensuremath{\tau}},
description={Lebenszyklus / Einsatzdauer des betrachteten Systems},
user1=a,
sort=tau
}
\newcommand{\items}[2]{\glstext*{#1} & #2 [\glsuseri*{#1}] \\}
\newglossarystyle{alignglos}%
{%
\renewcommand{\glsgroupskip}{}%
\renewcommand{\glossaryheader}{}%
\renewcommand{\glsgroupheading}[1]{}%
\renewenvironment{theglossary}%
{\begin{tabular}{@{}p{1cm}p{0.9\textwidth}}}%
{\end{tabular}}%
\renewcommand*{\glossaryentrynumbers}[1]{##1}%
\renewcommand*{\glsXalignglosXglsnumberformat}[2]{##2}%
\renewcommand*{\delimN}{,}%
\renewcommand*{\glossaryentryfield}[5]{%
\edef\doifinlocation{\noexpand\ifinlocation{\thealignglos}{\expandafter\striprelax##5\endstriprelax}}%
\doifinlocation
{%
\items{##1}{##3}%
}%
}%
}
\newcommand{\ifinlocation}[3]{%
\DTLifinlist{#1}{#2}{#3}{}%
}
\def\striprelax\relax#1\endstriprelax{#1}
\newcounter{alignglos}
\newenvironment{alignglos}%
{\stepcounter{alignglos}}%
{%
\printglossary[type=symbols,style=alignglos,title={}]
}
\begin{document}
\begin{alignglos}
\begin{align}
\gls{sym:deg} &= \frac{1-\gls{sym:etadegr}}{\gls{sym:tau}}
\end{align}
\end{alignglos}
\begin{alignglos}
\begin{align}
\gls{sym:tau} &= \ldots
\end{align}
\end{alignglos}
\end{document}
编辑:
makeindex
以下是使用而不是 的代码xindy
:
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{etoolbox}
\usepackage[counter=alignglos]{glossaries}
\newglossary[slg]{symbols}{slm}{sbl}{List of Symbols}
\makeglossaries
\newglossaryentry{sym:deg}{
type=symbols,
name={\ensuremath{\dot{D}}},
description={Prozentuale jährliche Abnahme des Wirkungsgrades},
user1={\%/a},
sort=deg
}
\newglossaryentry{sym:etadegr}{
type=symbols,
name={\ensuremath{\eta_{Deg,r}}},
description={Verbleibender Wirkungsgrad bezogen auf den
ursprünglichen Wirkungsgrad},
user1=\%,
sort=eta deg rest
}
\newglossaryentry{sym:tau}{
type=symbols,
name={\ensuremath{\tau}},
description={Lebenszyklus / Einsatzdauer des betrachteten Systems},
user1=a,
sort=tau
}
\newcommand{\items}[2]{\glstext*{#1} & #2 [\glsuseri*{#1}] \\}
% clean up the format of the location list
\newcommand{\stripentrynumbers}[1]{%
\striprelax#1\endstriprelax
}
\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
\edef\doifinloclist{\noexpand\ifinloclist{\thealignglos}{##5}}%
\doifinloclist
{%
\items{##1}{##3}%
}%
}%
\renewcommand*{\glossarysubentryfield}[1]{\glossaryentryfield}%
}
\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\setentrycounter[]#1#2\endstriprelax{#2}
\newcounter{alignglos}
\newenvironment{alignglos}%
{\stepcounter{alignglos}}%
{%
\printglossary[type=symbols,style=alignglos,title={}]
}
\begin{document}
\begin{alignglos}
\begin{align}
\gls{sym:deg} &= \frac{1-\gls{sym:etadegr}}{\gls{sym:tau}}
\end{align}
\end{alignglos}
\begin{alignglos}
\begin{align}
\gls{sym:tau} &= \ldots
\end{align}
\end{alignglos}
\end{document}
任一方法的结果:
如果您想使用equation
而不是 ,这也将有效align
。代码改编自每章或每节的词汇表。你只需要将你的方程式包装在alignglos
环境内。
笔记:
- 我使用了
\ensuremath
,所以$
当你使用词汇表条目时,无论你是在数学模式中还是在数学模式之外,都没有关系 - 我认为
Deg
应该是\operatorname{Deg}
或\mathrm{Deg}
(假设它不仅仅是D
乘以e
乘以g
)。
编辑2:
我修改了alignglos
样式,这样它就可以抑制组跳过。我还推迟\listbreak
到了 的末尾\do
。如果您安装了 Perl,您可以使用脚本makeglossaries
调用makeindex
或xindy
,这将跳过任何空的词汇表。如果您安装了 Perl 和 Java,您只需运行arara
在文档上,它将运行指令中列出的所有命令% arara:
。当您切换到 Linux 时,您应该已预先安装 Perl,并且可能还安装了 Java 运行时环境。