对公式目录(表)进行排序和查看 - 包含词汇表

对公式目录(表)进行排序和查看 - 包含词汇表

我希望我的公式索引看起来更像我的表格索引。

表格索引

但目前它看起来仍然像这样。没有夹子。此外,它距离右侧的框架太远了(showframe=trueist 已激活)。

公式索引

排序也应该按照用途排序,我试图得到这样的布局:

(1)T=XXX差距太大 触觉透明.................................12
(2) Y=XXX差距太大 机械承认.......................23
......

我的代码 MWE

\begin{filecontents}{\jobname-gls.tex} 
%Acronym 
\newacronym{MIC}{MIC}{Microsoft oder so} 
\newacronym{MIC2}{MIC2}{Microsoft oder so} 
%Glossar 
\newglossaryentry{test}{% 
   name={name}, 
     text={text}, 
     description={description} 
} 
%Symbolverz 
\newglossaryentry{symb:Phi}{ 
name=$\varphi$, 
description={Ein Winkel}, 
sort=symbolphi, type=symbolslist 
} 
%Formelverzeichnis 
\newglossaryentry{formel}{% 
name={\ensuremath{\protect\underline{Y}=1+1}}, 
description={formel}, 
type=formula 
} 
\newglossaryentry{formel2}{% 
name={\ensuremath{\protect\underline{2Y}=2+2}}, 
description={formel2}, 
type=formula 
} 
\end{filecontents} 

\documentclass[12pt]{scrbook} 
\usepackage[ngerman]{babel} 
\usepackage[T1]{fontenc} 
\usepackage[utf8]{inputenc} 
\usepackage{lmodern} 
\usepackage{csquotes} 

\usepackage[% 
automake, 
nonumberlist=true, 
acronym,       
toc,         
%index,         
section]       
{glossaries} 
% 
\usepackage[% 
stylemods=bookindex, 
style=tree, 
nostyles,       
] 
{glossaries-extra} 

\newglossary[slg]{symbolslist}{syi}{syg}{Symbolverzeichnis} 
\newglossary[ilg]{index}{ind}{idx}{Index} 
\newglossary*{formula}{Formelverzeichnis}[equation] 
%\newglossary{eqlg}{formula}{eqnd}{eqx}{Formelverzeichnis}[equation] %doesnt work
% 
\makeglossaries 
\loadglsentries{\jobname-gls.tex} 

\makeatletter 
\renewcommand*{\theequation}{\if@mainmatter \thechapter.\fi\arabic{equation}} 
\makeatother 

\usepackage{chngcntr}            %coun­ter­within  and counterwithout 
\counterwithout{equation}{chapter} 

\begin{document} 


\chapter{Vereichnisse} 
\printglossary[title=Glossar] 
\printglossary[title=Abkürzungsverzeichnis, type=\acronymtype] 
\printglossary[type=symbolslist] 
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\printglossary[type=formula,nonumberlist=false, style=long3col] %  alternative long4col
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setglossarysection{chapter}   
\clearpage 
\chapter{Test} 
Test text davor mit \gls{MIC2} \gls{MIC} und \gls{symb:Phi} 
\begin{equation} 
\gls{formel} 
\end{equation} 
\begin{equation} 
\gls{formel2} 
\end{equation} 
und text danach 


\end{document}

希望我的信息能对您有所帮助。谢谢

EDIT1:我试过了sort=1不幸的是这也不起作用

答案1

这里尝试重新创建您的要求:

%!TEX TS-program = lualatex
\documentclass{scrreprt}
    % \usepackage[ngerman]{babel}% Uncomment to see German version
    \usepackage{siunitx}
    \usepackage{tabu}% For our custom style using longtabu env.
    % \usepackage{showframe}
    \usepackage[super]{nth}% Superscript 1st, 2nd, ...

% Write some .bib files.
% These need to be processed with
% bib2gls <base filename>
% which writes them to *.glstex files, to be read by this document.
% \GlsXtrLoadResources tells glossaries-extra where to find the files.
\begin{filecontents}{abbreviations.bib}
    @abbreviation{microsoft,
        short={MIC},
        long={Microsoft},
    }
    @abbreviation{apple,
        short={APL},
        long={Apple},
    }
\end{filecontents}

\begin{filecontents}{greek.bib}
@symbol{angle,
    name={\ensuremath{\varphi}},
    description={An angle},
    unit={\si{\radian}},
}
\end{filecontents}

\begin{filecontents}{formulae.bib}
@symbol{formula_two,
    name={\ensuremath{\underline{2Y}=2+2}},
    description={Some other, less important formula},
}
@symbol{formula_one,
    name={\ensuremath{\underline{Y}=1+1}},
    description={A formula},
}
@symbol{formula_three,
    name={\ensuremath{\underline{3Y}=3+3+3+3+3+3+3+3}},
    description={The last, not important formula},
}
\end{filecontents}

\usepackage[%
    abbreviations,
    symbols,% Initializes type 'symbols' etc. automatically
    index,%
    record,% Required for bib2gls
]{glossaries-extra}

\newglossary*{formulae}{Formulae}[equation]% Starred variant automates things

% Add custom key for a 'unit' field for symbols:
\glsaddkey{unit}{\relax}{\glsentryunit}{\Glsentryunit}{\glsunit}{\Glsunit}{\GLSunit}

\GlsXtrLoadResources[%
    src={greek},%
    label-prefix={sym.},
    type=symbols,%
    group={greek},
]%
\GlsXtrLoadResources[%
    src={formulae},%
    label-prefix={form.},
    type=formulae,%
    sort=use,% Sort by order of use
    category={same as type},% Required for \glssetcategoryattribute
    % sort-field=description,% Sort by description field
]%
\GlsXtrLoadResources[%
    src={abbreviations},%
    label-prefix={abb.},
    type=abbreviations,%
]%

% Create aliases to save typing.
% \sym is like \gls{sym.}, but allows mods like \gls+{}[<after>]
\glsxtrnewgls{sym.}{\sym}
\glsxtrnewgls{form.}{\formula}
\glsxtrnewgls{abb.}{\abb}

% indexonlyfirst can also be a package option, for all glossaries
% Index only on first use for certain categories, as set manually above.
% https://tex.stackexchange.com/a/318886/120853
\glssetcategoryattribute{formulae}{indexonlyfirst}{true}%

% Modify name displayed for groups (default is to print group name verbatim, in this case 'greek' instead of 'Greek')
\glsxtrsetgrouptitle{greek}{Greek}


\RequirePackage{glossary-longextra} % Long, elaborate base style, providing e.g. 'long3col' for the abbreviations etc.

\newcommand*{\glshdrfont}[1]{\textbf{#1}} % Font for gls table heads

\newglossarystyle{symbunitlong}{% https://tex.stackexchange.com/a/269571/120853
    \setglossarystyle{long-name-desc-loc} % Base new style on existing one. This is quite important, since it implements all otherwise missing but maybe required commands, like \glsgroupskip if --group option is used for bib2gls

    \renewcommand*{\glossaryheader}{}% Remove it

    \renewenvironment{theglossary}%
    {\begin{longtabu}{rp{0.5\linewidth}p{\glspagelistwidth}l}} % Use Longtabu over longtable, the latter caused inexplicable issues with 'Column widths have changed, rerun Latex'
    {\end{longtabu}}%

    \renewcommand*{\glsgroupskip}{\addlinespace\addlinespace}%

    \renewcommand*{\glsgroupheading}[1]{%
        \glshdrfont{\glsgetgrouptitle{##1}} & \glshdrfont{\descriptionname} & \glshdrfont{\pagelistname} & \glshdrfont{Unit}\tabularnewline
    }%

    \renewcommand*{\glossentry}[2]{%
        \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
        \glossentrydesc{##1}\glspostdescription & ##2 & \glsentryunit{##1}\tabularnewline
    } % Use glsentryuseri to access entry, not glsuseri: https://tex.stackexchange.com/a/281772/120853
}

\newglossarystyle{formulaelong}{% https://tex.stackexchange.com/a/269571/120853
    \setglossarystyle{long-name-desc-loc} % Base new style on existing one. This is quite important, since it implements all otherwise missing but maybe required commands, like \glsgroupskip if --group option is used for bib2gls

    \renewcommand*{\glossaryheader}{}% Remove it

    \renewenvironment{theglossary}%
    {\begin{longtabu}{lp{0.4\linewidth}l}} % Use Longtabu over longtable, the latter caused inexplicable issues with 'Column widths have changed, rerun Latex'
    {\end{longtabu}}%

    % Renew \glossaryheader to something empty is this is not wanted:
    \renewcommand*{\glossaryheader}[1]{%
        \glshdrfont{Formula} & \glshdrfont{\descriptionname} & \glshdrfont{\nth{1} Use} \tabularnewline
    }%

    \renewcommand*{\glossentry}[2]{%
        \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
        \glossentrydesc{##1}\glspostdescription\dotfill & (##2) \tabularnewline
    } % Use glsentryuseri to access entry, not glsuseri: https://tex.stackexchange.com/a/281772/120853
}

\begin{document}

\addchap{Glossaries}% addchap from KOMA script
\setglossarysection{section}% In book/report, knock down one level to sections
\printunsrtsymbols[style=symbunitlong]
\printunsrtglossary[type=formulae, style=formulaelong]
\printunsrtabbreviations

\chapter{Test}
Text before, with \abb{microsoft}, \abb{apple} and \sym{angle}!
\begin{equation}
    \formula{formula_three}
\end{equation}
\begin{equation}
    \formula{formula_one}
\end{equation}
\clearpage
\begin{equation}
    \formula{formula_two}
\end{equation}
Text after.
Using the first again.
We index only the first, so it won't show up in the glossary:
\begin{equation}
    \formula{formula_three}
\end{equation}
\end{document}

因此,也许需要注意几点。由于它更现代、更强大,因此我使用lualatexIDE 进行编译,并通过魔术评论 %!TEX TS-program = lualatex

我将整个流程改用bib2gls,主要是因为我觉得这样比较好。主要区别在于,现在各种词汇表条目都位于自己的*.bib文件中,条目格式与传统书目文件中的条目格式非常相似。这应该是不言自明的。

如果我们加载glossaries-extra,则无需加载glossaries。此外,在使用包选项abbreviationssymbols和加载时index,这些词汇表和类型会自动启动和提供。这样就可以访问 之类的命令\printunsrtsymbols

现在,词汇表以“未排序”的形式打印,因为排序是由 完成的bib2gls,这是一个外部 Java 工具,您应该已经在 LaTeX 发行版中安装了它。因此,现在,编译过程又多了一个步骤,并且

lualatex <filename>
biblatex --group <filename>
lualatex <filename>

此后,相应的*.glstex文件应位于正确的位置并充当辅助文件。--group此处的选项很重要,以便正确排序希腊(以后可能是罗马)符号。

我们通过调用 来告诉我们的 document/在glossaries-extra哪里查找文件。只有在其选项中,像或这样的条目才应该出现。如果您已经在-file 中说 eg ,您会收到警告,因为 认为这样的字段是“内部”的。在选项中,您的意图的关键 key (...) 是,它按文档中的首次使用对条目进行排序。如果您不提供它,我很确定 的默认设置是按 -file 中的出现顺序排序,这与我们示例中的使用顺序(故意)不同。*.bib\GlsXtrLoadResourcesgrouptypegroup=greekbibbib2gls\GlsXtrLoadResourcessort=usebib2glsbib

由于词汇表type symbols已经自动生成,因此无需再执行此操作。我们只需使用newglossary*非标准“公式”词汇表即可。

您使用的条目名称是symb:Phi。对此有一些想法:

  • 条目名称本身不应包含前缀,如symb:或 (在我的情况下)sym.。这会导致大量重复。相反,这被抽象label-prefixGlsXtrLoadResources
  • 由于我们使用词汇表是为了提升符号声明,因此用符号名称来标记条目是没有意义的,Phi就像\varphi。与 LaTeX 中一样,写你意思是,而不仅仅是看上去正确。在这种情况下,我们意思是键入符号角度。可以是任何符号,但\varphi恰好代表那一刻。从这个角度来看,条目标签应该反映条目的意义,因此在这种情况下是的angle
  • 同样的想法也适用于缩写;如果缩写的标签是这样的MICalready,我们就会丢失意义并面临标签用尽的危险,造成普遍混乱。此外,源代码的可读性也会受到一定影响。像这样的句子The angle is \sym{angle}.仍然很容易阅读,含义非常清晰,让我们很容易发现错误。请注意,您还可以发出\glsdesc打印的描述字段angle

如果我们发出indexonlyfirst,我们可以对整个类别执行此操作。首先,我们需要通过发出category具有值的键来为刚刚加载的条目分配一个类别same as type。然后,我们可以调用来仅索引该类别的第一次出现的条目。然后,只有这些条目才会在页面列表中引用(页面列表在样式声明中用\glssetcategoryattribute表示)。##2

符号通常也有单位。虽然glossaries-extra具有为 等字段赋值的出色能力user1,但由于我们对我们的意图非常确定,因此我们应该使用 发布一个全新的字段\glsaddkey{unit}...

作为基础样式,我们使用glossaries-longextra。但是,我们并不直接使用它,而是定义我们自己的从 派生的样式long-name-desc-loc,因为这恰好与我们追求的大致相似。

这里的一个关键特性可能是在表格单元格中使用\dotfill,用点填充直到页面列表的水平空间,就像在表格列表等中一样。

此外,分配一些别名命令,这些别名命令也允许使用基本命令进行修改\gls,例如。这省去了我们每次调用时都\gls{}[<append>]必须重复的麻烦。label-prefix\gls{}

请注意,由于诸如 之类的命令,该文档在很大程度上与语言无关,并且可以通过使用或在 的情况下轻松\descriptionname接受德语。babellualatexpolyglossia

最后,你要求像这样的布局

(1)T=XXX 长间隙触摸透明................................12

(2)Y=XXX 长间隙机械承认.......................23

...

虽然页面列表(或者在本例中是公式第一次出现的页面)现在是完整的,但您似乎想要最左边的列中的公式编号?

我承认,我根本不知道从哪里开始。/glossaries非常glossaries-extra擅长通过页码进行索引,而且它很自然,并且很容易实现和修改。由于这已经提供了一个相当独特、明确的引用,因此以公式编号的形式添加第二个引用似乎是多余的。如果你只是想要一个从左侧开始(1)并以整数计数的编号列表,我会认为这也是多余的,最好也不要用。

如果您想用第一次使用的公式标签替换最右列的页码,这可能是一个不错的想法。不过,我完全不知道如何实现这一点。它也很容易出现故障,因为没有什么可以阻止使用在环境\formula{<label>}之外发出equation。或者如果我们碰巧在里面怎么办equation*

词汇表 附加符号 第 1 页

词汇表 附加符号 第 2 页

词汇表 附加符号 第 3 页

编辑1

根据您的评论,我重新审视了这种情况,结果发现,它glossaries仍然很出色,并且与我的想法相反,它提供了通过\newglossary*{formulae}{Formulae}[equation](即尾随可选参数)简单嵌入任意计数器的功能。现在,这会将数字列表从页面列表转换为方程式数字列表,并且词汇表会打印:

以公式编号作为数字列表的词汇表

编辑2

根据您最近的评论,公式编号现在也放在括号中。如果您想使用括号等,也许可以查看。这里的关键是将数字列表括mathtools起来。\newtagform(##2)

词汇表中带括号的方程式编号列表

相关内容