我正在尝试为具有长格式和短格式的带有额外参数的数学符号创建词汇表条目。我尝试了以下方法带有额外参数的词汇表条目用于创建额外参数。
我使用第一个键来保存长格式,使用文本来保存短格式。
这不能完全发挥作用,因为如果我尝试使用 \glsfirst{}[] 的长格式,则索引无法正确捕获。
任何关于如何更好地修复/实施的帮助都将不胜感激。
我迄今为止的代码:
\documentclass{article}
\usepackage[unicode, colorlinks=true]{hyperref}
\usepackage[automake, nonumberlist,acronym,nopostdot, style=super, shortcuts]{glossaries}
\setlength{\glsdescwidth}{0.9\textwidth}
\makeglossaries
\glsnoexpandfields
\newcommand*{\providedIndex}{} % default index
\newglossaryentry{Vertex}{
name = \ensuremath{V_{i}},
text = \ensuremath{V_{\providedIndex}},
description = Vertex $i$
}
\newglossaryentry{volt}{
name = \ensuremath{ v(V_i), v_{i}},
text = \ensuremath {v_{\providedIndex}},
first = \ensuremath {v(\gls{Vertex})},
description = Voltage of vertex $i$
}
% modify the entry's format
\defglsentryfmt{%
\let\orgprovidedIndex\providedIndex
\ifdefempty\glsinsert
{}%
{%
\let\providedIndex\glsinsert
\let\glsinsert\relax
}%
\glsgenentryfmt
\let\providedIndex\orgprovidedIndex
}
\begin{document}
\printglossary
\section{Main}
my use cases:
$\gls{Vertex} = V$
$\gls{Vertex}[k] = V_k$
$\gls{volt}[k] = v(V_k)$ - working long form (actual first use)
$\gls{volt}[k] = v_k$ - working short form
$\glsfirst{volt}[k] \neq v(V_k)$ - not working long form, index is messed up
\end{document}
答案1
您可以定义另一个命令,如果您想使用第一次出现的命令,可以使用该命令volt
:
\documentclass{article}
\usepackage[unicode, colorlinks=true]{hyperref}
\usepackage[automake, nonumberlist,acronym,nopostdot, style=super, shortcuts]{glossaries}
\setlength{\glsdescwidth}{0.9\textwidth}
\makeglossaries
\glsnoexpandfields
\newcommand*{\providedIndex}{} % default index
\newglossaryentry{Vertex}{
name = \ensuremath{V_{i}},
text = \ensuremath{V_{\providedIndex}},
description = Vertex $i$
}
\newglossaryentry{volt}{
name = \ensuremath{ v(V_i), v_{i}},
text = \ensuremath {v_{\providedIndex}},
first = \ensuremath {v(\gls{Vertex})},
description = Voltage of vertex $i$
}
\newcommand*{\glsfirstvolt}[1][]{%
\glslink{volt}{\ensuremath{v(V_#1)}}}
% modify the entry's format
\defglsentryfmt{%
\let\orgprovidedIndex\providedIndex
\ifdefempty\glsinsert
{}%
{%
\let\providedIndex\glsinsert
\let\glsinsert\relax
}%
\glsgenentryfmt
\let\providedIndex\orgprovidedIndex
}
\begin{document}
\printglossary
\section{Main}
my use cases:
$\gls{Vertex} = V$
$\gls{Vertex}[k] = V_k$
$\gls{volt}[k] = v(V_k)$ - working long form (actual first use)
$\gls{volt}[k] = v_k$ - working short form
$\glsfirst{volt}[k] \neq v(V_k)$ - not working long form, index is messed up
$\glsfirstvolt[k] = v(V_k)$ - working
\end{document}
如果不声明命令\glsfirstvolt
,您可以\glsfirst
按如下方式重新定义。我在此处提供的实现是最小的,既不提供带星号的版本,也不提供加号的版本\glsfirst
。如果您需要这些,我可以提供它们。
\RequirePackage{xparse}
\RenewDocumentCommand{\glsfirst}{O{} m o}{%
\bgroup%
\glslocalreset{#2}%
\IfNoValueTF{#3}%
{\gls[#1]{#2}}%
{\gls[#1]{#2}[#3]}%
\egroup}
您的问题可能是由错误(或软件包文档中的描述不准确)引起的,您或许应该联系软件包作者。