问题

问题

我正在寻找一种方法来自动创建图例equation(比如说嵌入在align环境中)。

我目前使用的是半自动化到全手动的方式。让我解释一下:结果应该是这样的:

图片1

为了实现这一目标,我需要 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环境内。

笔记:

  1. 我使用了\ensuremath,所以$当你使用词汇表条目时,无论你是在数学模式中还是在数学模式之外,都没有关系
  2. 我认为Deg应该是\operatorname{Deg}\mathrm{Deg}(假设它不仅仅是D乘以e乘以g)。

编辑2:

我修改了alignglos样式,这样它就可以抑制组跳过。我还推迟\listbreak到了 的末尾\do。如果您安装了 Perl,您可以使用脚本makeglossaries调用makeindexxindy,这将跳过任何空的词汇表。如果您安装了 Perl 和 Java,您只需运行arara在文档上,它将运行指令中列出的所有命令% arara:。当您切换到 Linux 时,您应该已预先安装 Perl,并且可能还安装了 Java 运行时环境。

相关内容