我希望我的公式索引看起来更像我的表格索引。
但目前它看起来仍然像这样。没有夹子。此外,它距离右侧的框架太远了(showframe=true
ist 已激活)。
排序也应该按照用途排序,我试图得到这样的布局:
(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} %counterwithin 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}
因此,也许需要注意几点。由于它更现代、更强大,因此我使用lualatex
IDE 进行编译,并通过魔术评论 %!TEX TS-program = lualatex
。
我将整个流程改用bib2gls
,主要是因为我觉得这样比较好。主要区别在于,现在各种词汇表条目都位于自己的*.bib
文件中,条目格式与传统书目文件中的条目格式非常相似。这应该是不言自明的。
如果我们加载glossaries-extra
,则无需加载glossaries
。此外,在使用包选项abbreviations
、symbols
和加载时index
,这些词汇表和类型会自动启动和提供。这样就可以访问 之类的命令\printunsrtsymbols
。
现在,词汇表以“未排序”的形式打印,因为排序是由 完成的bib2gls
,这是一个外部 Java 工具,您应该已经在 LaTeX 发行版中安装了它。因此,现在,编译过程又多了一个步骤,并且
lualatex <filename>
biblatex --group <filename>
lualatex <filename>
此后,相应的*.glstex
文件应位于正确的位置并充当辅助文件。--group
此处的选项很重要,以便正确排序希腊(以后可能是罗马)符号。
我们通过调用 来告诉我们的 document/在glossaries-extra
哪里查找文件。只有在其选项中,像或这样的条目才应该出现。如果您已经在-file 中说 eg ,您会收到警告,因为 认为这样的字段是“内部”的。在选项中,您的意图的关键 key (...) 是,它按文档中的首次使用对条目进行排序。如果您不提供它,我很确定 的默认设置是按 -file 中的出现顺序排序,这与我们示例中的使用顺序(故意)不同。*.bib
\GlsXtrLoadResources
group
type
group=greek
bib
bib2gls
\GlsXtrLoadResources
sort=use
bib2gls
bib
由于词汇表type
symbols
已经自动生成,因此无需再执行此操作。我们只需使用newglossary*
非标准“公式”词汇表即可。
您使用的条目名称是symb:Phi
。对此有一些想法:
- 条目名称本身不应包含前缀,如
symb:
或 (在我的情况下)sym.
。这会导致大量重复。相反,这被抽象label-prefix
为GlsXtrLoadResources
- 由于我们使用词汇表是为了提升符号声明,因此用符号名称来标记条目是没有意义的,
Phi
就像\varphi
。与 LaTeX 中一样,写你意思是,而不仅仅是看上去正确。在这种情况下,我们意思是键入符号角度。可以是任何符号,但\varphi
恰好代表那一刻。从这个角度来看,条目标签应该反映条目的意义,因此在这种情况下是的angle
。 - 同样的想法也适用于缩写;如果缩写的标签是这样的
MIC
already,我们就会丢失意义并面临标签用尽的危险,造成普遍混乱。此外,源代码的可读性也会受到一定影响。像这样的句子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
接受德语。babel
lualatex
polyglossia
最后,你要求像这样的布局
(1)T=XXX 长间隙触摸透明................................12
(2)Y=XXX 长间隙机械承认.......................23
...
虽然页面列表(或者在本例中是公式第一次出现的页面)现在是完整的,但您似乎想要最左边的列中的公式编号?
我承认,我根本不知道从哪里开始。/glossaries
非常glossaries-extra
擅长通过页码进行索引,而且它很自然,并且很容易实现和修改。由于这已经提供了一个相当独特、明确的引用,因此以公式编号的形式添加第二个引用似乎是多余的。如果你只是想要一个从左侧开始(1)
并以整数计数的编号列表,我会认为这也是多余的,最好也不要用。
如果您想用第一次使用的公式标签替换最右列的页码,这可能是一个不错的想法。不过,我完全不知道如何实现这一点。它也很容易出现故障,因为没有什么可以阻止使用在环境\formula{<label>}
之外发出equation
。或者如果我们碰巧在里面怎么办equation*
?
编辑1
根据您的评论,我重新审视了这种情况,结果发现,它glossaries
仍然很出色,并且与我的想法相反,它提供了通过\newglossary*{formulae}{Formulae}[equation]
(即尾随可选参数)简单嵌入任意计数器的功能。现在,这会将数字列表从页面列表转换为方程式数字列表,并且词汇表会打印:
编辑2
根据您最近的评论,公式编号现在也放在括号中。如果您想使用括号等,也许可以查看。这里的关键是将数字列表括mathtools
起来。\newtagform
(##2)