带单位的有序符号列表

带单位的有序符号列表

我想使用 \makeglossaries 创建一个符号列表,但它必须按顺序排列,并且符号也必须具有各自的单位。在寻求问题解决方案的过程中,我遇到了两个答案,它们都包含我想要的内容,但都只有一个期望的结果。

1st- 有单位但没有排序的符号(摘自词汇表:如何自定义带有单位附加列的符号列表?

    \documentclass{book}                           
\usepackage{siunitx}
\usepackage[symbols,nogroupskip,nonumberlist,automake]{glossaries-extra}              % use glossaries-package
\usepackage{subfiles}

\setlength{\glsdescwidth}{15cm}

\newglossary[slg]{symbolslist}{syi}{syg}{Symbolslist} % create add. symbolslist


\glsaddkey{unit}{\glsentrytext{\glslabel}}{\glsentryunit}{\GLsentryunit}{\glsunit}{\Glsunit}{\GLSunit}

\makeglossaries                                   % activate glossaries-package


% ==== EXEMPLARY ENTRY FOR SYMBOLS LIST =========================================

    \newglossaryentry{symb:Pi}{name=\ensuremath{\pi},
        description={Geometrical value},
        unit={},
        type=symbolslist}

    \newglossaryentry{height}{name=\ensuremath{h},
        description={Height of tower},
        unit={\si{m}},
        type=symbolslist}

    \newglossaryentry{energyconsump}{name=\ensuremath{P},
        description={Energy consumption},
        unit={\si{kW}},
        type=symbolslist}

     \newglossaryentry{Eficiency}{name=\ensuremath{\eta},
        description={Useful portion of work},
        unit={\si{}},
        type=symbolslist}

\newglossarystyle{symbunitlong}{%
\setglossarystyle{long3col}% base this style on the list style
\renewenvironment{theglossary}{% Change the table type --> 3 columns
  \begin{longtable}{lp{0.6\glsdescwidth}>{\centering\arraybackslash}p{2cm}}}%
  {\end{longtable}}%
%
\renewcommand*{\glossaryheader}{%  Change the table header
  \bfseries Simbolo & \bfseries Description & \bfseries Unit \\
  \hline
  \endhead}
\renewcommand*{\glossentry}[2]{%  Change the displayed items
\glstarget{##1}{\glossentryname{##1}} %
& \glossentrydesc{##1}% Description
& \glsunit{##1}  \tabularnewline
}
}


\begin{document}

    \glsaddall

    %\printglossary[type=\acronymtype,style=long]  % list of acronyms
    \printglossary[type=symbolslist,style=symbunitlong,title={Lista de Símbolos}]   % list of symbols
   % \printglossary[type=main]                     % main glossary

\end{document}

第二个,可以排序,但是我无法添加单位。

如何有效地使用符号列表进行论文?

\documentclass{report}

\usepackage[colorlinks]{hyperref}
\usepackage[symbols,nogroupskip,sort=none]{glossaries-extra}

\glsxtrnewsymbol[description={position}]{x}{\ensuremath{x}}
\glsxtrnewsymbol[description={velocity}]{v}{\ensuremath{v}}
\glsxtrnewsymbol[description={acceleration}]{a}{\ensuremath{a}}
\glsxtrnewsymbol[description={time}]{t}{\ensuremath{t}}
\glsxtrnewsymbol[description={force}]{F}{\ensuremath{F}}

\begin{document}
\tableofcontents
\printunsrtglossary[type=symbols,style=long]

\chapter{Sample}
Reference symbols: $\gls{x}$, $\gls{v}$, $\gls{a}$, $\gls{t}$,
$\gls{F}$.

\end{document}

真的很抱歉打扰,我是 Latex 的新手,我已经被这个问题困扰了一段时间了。

答案1

你的第二个例子使用longstyle=long词汇表样式(在 的可选参数中设置\printunsrtglossary)。这仅显示术语(例如\ensuremath{x})和描述(例如position),但不显示任何其他信息(除了位置列表,该示例中不存在)。您不仅需要添加单位,还需要提供显示它们的样式。

一些预定义样式symbol也会显示该字段,因此如果您使用该字段来存储单位,那么您只需使用显示符号的样式即可。表 15.1glossaries用户手册中指明哪些样式显示该符号。

例如,

\documentclass{report}

\usepackage{siunitx}

\usepackage[colorlinks]{hyperref}
\usepackage[symbols,nogroupskip,sort=none]{glossaries-extra}

\glsxtrnewsymbol[description={position},symbol={\si{m}}]{x}{\ensuremath{x}}
\glsxtrnewsymbol[description={velocity},symbol={\si{\metre\per\second}}]{v}{\ensuremath{v}}
\glsxtrnewsymbol[description={acceleration},symbol={\si{\metre\per\second\squared}}]{a}{\ensuremath{a}}
\glsxtrnewsymbol[description={time},symbol={\si{s}}]{t}{\ensuremath{t}}
\glsxtrnewsymbol[description={force},symbol={\si{N}}]{F}{\ensuremath{F}}

\begin{document}
\tableofcontents
\printunsrtglossary[type=symbols,style=long4col]

\chapter{Sample}
Reference symbols: $\gls{x}$, $\gls{v}$, $\gls{a}$, $\gls{t}$,
$\gls{F}$. Reference unit: $\glssymbol{v}$.

\end{document}

得出的结果为:

符号列表图像

这实际上有四列,但第四列是空的,因为没有位置列表。该\glssymbol命令的工作原理类似于\gls,但显示符号值(在本例中为单位)。

如果您希望使用自定义unit键,而不是使用提供的symbol键,则可以像第一个示例一样添加一个。有两个命令可以添加新键:\glsaddkey\glsaddstoragekey。这取决于您是否要使用如上例中的命令\glssymbol。如果要,则需要:

\glsaddkey{unit}{}{\glsentryunit}{\Glsentryunit}{\glsunit}{\Glsunit}{\GLSunit}

(对于单位来说,大小写转换命令没有多大意义,但语法需要它们。)如果您只需要单位显示在符号列表中,那么您可以执行以下操作:

\glsaddstoragekey{unit}{}{\glsentryunit}

您还需要使用\glsnoexpandfields以避免以下问题:扩张

您可以在第一个示例中使用词汇表样式,但应该\glsentryunit使用\glsunit

\newglossarystyle{symbunitlong}{%
 \setglossarystyle{long3col}% base this style on the list style
 \renewenvironment{theglossary}{% Change the table type --> 3 columns
   \begin{longtable}{lp{\glsdescwidth}>{\centering\arraybackslash}p{2cm}}}%
   {\end{longtable}}%
 \renewcommand*{\glossaryheader}{%  Change the table header
   \bfseries Symbol & \bfseries Description & \bfseries Unit\\\hline
   \endhead}%
 \renewcommand*{\glossentry}[2]{%  Change the displayed items
    \glstarget{##1}{\glossentryname{##1}} %
    & \glossentrydesc{##1}% Description
    & \glsentryunit{##1}  \tabularnewline
 }%
}

描述列的宽度由 给出\glsdescwidth。如果尺寸不合适,您可以更改它。例如:

\setlength{\glsdescwidth}{.5\textwidth}

这使其成为可用文本宽度的一半,或者您可以使用绝对值:

\setlength{\glsdescwidth}{3in}

l或者,如果您有简短的描述,您也可以将所有列更改为:

 \renewenvironment{theglossary}%
   {\begin{longtable}{lll}}%
   {\end{longtable}}%

完整示例:

\documentclass{report}

\usepackage{siunitx}

\usepackage[colorlinks]{hyperref}
\usepackage[symbols,nogroupskip,sort=none]{glossaries-extra}

% new keys must be defined before use
\glsaddstoragekey{unit}{}{\glsentryunit}
\glsnoexpandfields

\glsxtrnewsymbol[description={position},unit={\si{m}}]{x}{\ensuremath{x}}
\glsxtrnewsymbol[description={velocity},unit={\si{\metre\per\second}}]{v}{\ensuremath{v}}
\glsxtrnewsymbol[description={acceleration},unit={\si{\metre\per\second\squared}}]{a}{\ensuremath{a}}
\glsxtrnewsymbol[description={time},unit={\si{s}}]{t}{\ensuremath{t}}
\glsxtrnewsymbol[description={force},unit={\si{N}}]{F}{\ensuremath{F}}

\newglossarystyle{symbunitlong}{%
 \setglossarystyle{long3col}% base this style on the list style
 \renewenvironment{theglossary}{% Change the table type --> 3 columns
   \begin{longtable}{lp{\glsdescwidth}>{\centering\arraybackslash}p{2cm}}}%
   {\end{longtable}}%
 %
 \renewcommand*{\glossaryheader}{%  Change the table header
   \bfseries Symbol & \bfseries Description & \bfseries Unit\\\hline
   \endhead}%
 \renewcommand*{\glossentry}[2]{%  Change the displayed items
    \glstarget{##1}{\glossentryname{##1}} %
    & \glossentrydesc{##1}% Description
    & \glsentryunit{##1}  \tabularnewline
 }%
}

\begin{document}
\tableofcontents
\printunsrtglossary[type=symbols,style=symbunitlong]

\chapter{Sample}
Reference symbols: $\gls{x}$, $\gls{v}$, $\gls{a}$, $\gls{t}$,
$\gls{F}$.

\end{document}

符号列表如下:

符号列表的图像

这涉及如何在符号列表中显示单位,但排序是通过按所需顺序定义每个符号来手动执行的。如果您想先按拉丁文再按希腊文自动排序,则需要使用额外的工具。最适合此任务的是bib2gls因为它可以识别诸如的希腊命令\alpha,但为此您需要在.bib文件中定义所有符号。

例如,symbols.bib

% Encoding: UTF-8

@symbol{alpha,
  unit= {\si{\radian\per\second\squared}},
  name = {\ensuremath{\alpha}},
  description = {angular acceleration}
}

@symbol{x,
  unit = {\si{m}},
  name = {\ensuremath{x}},
  description = {position}
}

@symbol{v,
  unit = {\si{\metre\per\second}},
  name = {\ensuremath{v}},
  description = {velocity}
}

@symbol{a,
  unit = {\si{\metre\per\second\squared}},
  name = {\ensuremath{a}},
  description = {acceleration}
}

@symbol{t,
  unit = {\si{s}},
  name = {\ensuremath{t}},
  description = {time}
}

@symbol{F,
  unit = {\si{N}},
  name = {\ensuremath{F}},
  description = {force}
}

该文件:

\documentclass{report}

\usepackage{siunitx}

\usepackage[colorlinks]{hyperref}
\usepackage[record,% using bib2gls
 symbols % create list of symbols
]{glossaries-extra}

% new keys must be defined before \GlsXtrLoadResources    
\glsaddstoragekey{unit}{}{\glsentryunit}

\GlsXtrLoadResources[
  src={symbols}, % data in symbols.bib
  sort-field={name}, % sort by name field
  sort={letter-nocase}, % case-insensitive letter sort
  type=symbols % put these terms in the symbols list
]

% Define new glossary style

\newglossarystyle{symbunitlong}{%
 \setglossarystyle{long3col}% base this style on the list style
 \renewenvironment{theglossary}{% Change the table type --> 3 columns
   \begin{longtable}{lp{\glsdescwidth}>{\centering\arraybackslash}p{2cm}}}%
   {\end{longtable}}%
 %
 \renewcommand*{\glossaryheader}{%  Change the table header
   \bfseries Symbol & \bfseries Description & \bfseries Unit\\\hline
   \endhead}%
 \renewcommand*{\glossentry}[2]{%  Change the displayed items
    \glstarget{##1}{\glossentryname{##1}} %
    & \glossentrydesc{##1}% Description
    & \glsentryunit{##1}  \tabularnewline
 }%
}

\begin{document}
\tableofcontents
\printunsrtglossary[type=symbols,style=symbunitlong]

\chapter{Sample}
Reference symbols: $\gls{x}$, $\gls{v}$, $\gls{a}$, $\gls{t}$,
$\gls{F}$ and $\gls{alpha}$.

\end{document}

如果调用该文档,test.tex则文档构建为:

pdflatex test
bib2gls test
pdflatex test

(如果您需要帮助将其与文本编辑器集成,请参阅将 makeglossaries 或 makeglossaries-lite 或 bib2gls 纳入文档构建中

sort=letter-nocase选项执行不区分大小写的字符排序,因此拉丁字符自然会排在希腊字符之前。结果是:

符号列表

如果您更喜欢使用样式long4col,那么第四列现在将包含位置列表(文档中使用该术语的位置)。例如:

\documentclass{report}

\usepackage{siunitx}

\usepackage[colorlinks]{hyperref}
\usepackage[record,% using bib2gls
 symbols % create list of symbols
]{glossaries-extra}

\GlsXtrLoadResources[
  src={symbols}, % data in symbols.bib
  sort-field={name}, % sort by name field
  sort={letter-nocase}, % case-insensitive letter sort
  type=symbols, % put these terms in the symbols list
  field-aliases={unit=symbol}% convert unit key to symbol
]

\begin{document}
\tableofcontents
\printunsrtglossary[type=symbols,style=long4col]

\chapter{Sample}
Reference symbols: $\gls{x}$, $\gls{v}$, $\gls{a}$, $\gls{t}$,
$\gls{F}$ and $\gls{alpha}$. Unit for $\gls{v}$: $\glssymbol{v}$.

\end{document}

该选项field-aliases={unit=symbol}使bib2gls自定义unit字段被视为实际symbol字段,因此无需更改文件symbols.bib。(如果没有此别名,bib2gls将忽略该unit字段,因为该unit键不再在文档中定义。)

符号列表

您可以使用任一选项省略位置列表nonumberlist。例如:

\usepackage[record,symbols,nonumberlist]{glossaries-extra}

或者

\printunsrtglossary[type=symbols,style=long4col,nonnumberlist]

save-locations=false或者,您可以在资源选项中使用:

\GlsXtrLoadResources[
  src={symbols}, % data in symbols.bib
  sort-field={name}, % sort by name field
  sort={letter-nocase}, % case-insensitive letter sort
  type=symbols, % put these terms in the symbols list
  field-aliases={unit=symbol},% convert unit key to symbol
  save-locations=false % don't save location lists
]

glossaries-extra软件包现在附带一个补充软件包glossary-longextra,它提供了使用环境的其他词汇表样式。这些样式比基础软件包提供的样式longtable更灵活,因此更容易调整。有longglossaries每种longextra风格的样本glossaries画廊。(如果glossary-longextra.sty未找到,请尝试升级您的glossaries-extra安装。)

例如:

\documentclass{report}

\usepackage{siunitx}

\usepackage[colorlinks]{hyperref}
\usepackage[record,% using bib2gls
 symbols, % create list of symbols
 stylemods={longextra} % load glossary-longextra.sty
]{glossaries-extra}

\GlsXtrLoadResources[
  src={symbols}, % data in symbols.bib
  sort-field={name}, % sort by name field
  sort={letter-nocase}, % case-insensitive letter sort
  type=symbols, % put these terms in the symbols list
  field-aliases={unit=symbol},% convert unit key to symbol
  save-locations=false % don't save location lists
]

% change column headers:
\renewcommand{\entryname}{Symbol}
\renewcommand{\symbolname}{Unit}

\begin{document}
\tableofcontents
\printunsrtglossary[type=symbols,style=long-name-desc-sym]

\chapter{Sample}
Reference symbols: $\gls{x}$, $\gls{v}$, $\gls{a}$, $\gls{t}$,
$\gls{F}$ and $\gls{alpha}$. Unit for $\gls{v}$: $\glssymbol{v}$.

\end{document}

这使用long-name-desc-sym样式,其名称在第一列,描述在第二列,符号在第三列。名称和符号列的标题文本由语言敏感命令\entryname和给出\symbolname。这些在上例中重新定义。此样式不显示位置列表,因此我已指示bib2gls不要费心保存位置(使用save-locations=false)。

符号列表的图像

\glslongextraNameAlign可以通过重新定义(名称列)和(符号列)来更改列对齐方式\glslongextraSymbolAlign。例如:

\renewcommand{\glslongextraNameAlign}{c}
\renewcommand{\glslongextraSymbolAlign}{r}

如果您想要不同的列顺序,您可以使用其他样式之一。例如,long-name-sym-desc第一列是名称,第二列是符号,第三列是描述。

答案2

@Nicola Talbot 感谢您的出色回答。效果非常好!也许可以作为上一个示例的一个小扩展。如果您有多个列表并且不想对所有列表进行更改,您还可以像前面的示例一样调整 glossaries-extra 样式,并根据它们定义新样式。您只需使用 glossaries-extra 即可获得更多选项,例如:

\documentclass{report}

\usepackage{siunitx}

\usepackage[abbreviations, % create list of abbreviations
            symbols, % create list of symbols
            nomain, % omit main glossary
            nopostdot, % remove dot at the end of entry
            nonumberlist, % don't show numbers where referenced
            stylemods={longextra} % load glossary-longextra.sty
            ]{glossaries-extra}

% new keys must be defined before use
\glsaddstoragekey{unit}{}{\glsentryunit}
\glsnoexpandfields

\glsxtrnewsymbol[description={position},unit={\si{m}}]{x}{\ensuremath{x}}
\glsxtrnewsymbol[description={velocity},unit={\si{\metre\per\second}}]{v}{\ensuremath{v}}
\glsxtrnewsymbol[description={acceleration},unit={\si{\metre\per\second\squared}}]{a}{\ensuremath{a}}
\glsxtrnewsymbol[description={time},unit={\si{s}}]{t}{\ensuremath{t}}
\glsxtrnewsymbol[description={force},unit={\si{N}}]{F}{\ensuremath{F}}

\newglossarystyle{long-sym-desc-unit}{%
 \setglossarystyle{long-name-desc-sym}% base this style on the list style
    % change column headers:
    \renewcommand{\entryname}{Symbol}
    \renewcommand{\symbolname}{Unit}
    \renewcommand*{\glossentry}[2]{%  Change the displayed items
        \glstarget{##1}{\glossentryname{##1}} %
        & \glossentrydesc{##1} % Description
        & \glsentryunit{##1} % Unit
         \tabularnewline
 }%
}


\begin{document}

\printglossary[type=symbols,title=List of Symbols,style=long-sym-desc-unit]

\chapter{Sample}
Reference symbols: $\gls{x}$, $\gls{v}$, $\gls{a}$, $\gls{t}$,
$\gls{F}$ and $\gls{alpha}$. Unit for $\gls{v}$: $\glssymbol{v}$.


\end{document}

相关内容