.png)
Dado o MWE a seguir, existe uma maneira de alterar a localização da forma abreviada no primeiro uso (completa), para que ela nem sempre apareça após a impressão da forma longa?
\documentclass[]{article}
\usepackage{acro,bm}
\DeclareAcronym{rho}{
short=$\rho$,
long=electron charge density
}
\DeclareAcronym{grad}{
short=$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$,
long=gradient of \ac{rho}
}
\begin{document}
first use of grad:
\ac{grad}
would rather have:
gradient (\acs{grad}) of \acf{rho}
\end{document}
Caso contrário, poderia haver um novo conjunto de comandos para usar dentro do \DeclareAcronym
bloco? Portanto, a declaração poderia parecer
\DeclareAcronym{grad}{
short=$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$,
long=gradient\short of \ac{rho}
}
Onde \short
seria substituído por um espaço (observe que não há espaço antes \short
) seguido pela forma abreviada entre parênteses? Comandos semelhantes podem ser adicionados para outros argumentos, \DeclareAcronym
conforme necessário.
Responder1
A \DeclareAcroFirstStyle
macro poderia, no futuro, fornecer uma interface para conseguir isso, mas com as opções atuais disponíveis, não consegui resolver nada, do jeito que está, poderia encontrar duas maneiras de fazer isso, mas ambas com possíveis problemas que interferem em outrosacro
características.
Ao utilizar a \acifused{<id>}{<true>}{<false>}
macro podemos adaptar a long
entrada de \DeclareAcronym{grad}{<keys>}
para alterar sua aparência de acordo com a rho
utilização da sigla. Infelizmente não parece particularmente fácil acrescentar texto à primeira aparição, em vez disso tive que definir um first-style
que apenas imprimisse o formato longo e incluísse o formato curto no formato longo como
\DeclareAcroFirstStyle{conditional}{inline}{
only-long=true
}
\DeclareAcronym{grad}{
short=$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$,
long=gradient \acifused{rho}{of \ac{rho} (\acs{grad})}{(\acs{grad}) of \acl{rho} (\acs{rho})},
first-style=conditional,
}
Embora isso gere as primeiras aparições conforme desejado, ele não funciona tão bem com \acl{grad}
, que ainda gerará um formato abreviado entre colchetes.
\documentclass{article}
\usepackage{acro,bm}
\DeclareAcroFirstStyle{conditional}{inline}{
only-long=true
}
\DeclareAcronym{rho}{
short=$\rho$,
long=electron charge density,
}
\DeclareAcronym{grad}{
short=$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$,
long=gradient \acifused{rho}{of \ac{rho} (\acs{grad})}{(\acs{grad}) of \acl{rho} (\acs{rho})},
first-style=conditional,
}
\DeclareAcronym{gradtwo}{
short=$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$,
long=gradient of \acs{rho}
}
\begin{document}
\ac{grad}
\acuse{rho}
\acf{grad}
\ac{grad}
\acl{grad}
\acreset{rho}
\acl{grad}
\end{document}
alternativamenteacro
permite a criação manual de \ac
comandos semelhantes a -, que podemos usar para construir algo especificamente para o grad
acrônimo que montará manualmente o formato longo ou curto apropriado, dependendo se os acrônimos rho
e grad
(no código abaixo gradtwo
) foram usados.
\ExplSyntaxOn
\NewDocumentCommand \acgrad {s}
{
\acro_begin:
\acro_reset_specials:
\acro_check_and_mark_if:nn {#1}{gradtwo}
\acro_if_acronym_used:nTF {gradtwo}
{
\acro_short:n {gradtwo}
}{
\acro_if_acronym_used:nTF {rho}
{
\acro_long:n {gradtwo}~(\acro_short:n {gradtwo})
}{
gradient~(\acro_short:n {gradtwo})~of~\acro_long:n {rho}~(\acro_short:n {rho})
}
}
\acro_end:
}
\ExplSyntaxOff
Isto tem a vantagem de deixar a long
versão intacta e \acgrad
é usado em vez de \ac{grad}
com dificuldade extra mínima, mas qualquer uma das variantes para fazer o equivalente a \Ac{grad}
, \acp{grad}
etc. deve ser definida manualmente para que compartilhem a primeira aparência apropriada.
Comparando essas duas estratégias
\documentclass[]{article}
\usepackage{acro,bm}
\DeclareAcroFirstStyle{conditional}{inline}{
only-long=true
}
\DeclareAcronym{rho}{
short=$\rho$,
long=electron charge density,
}
\DeclareAcronym{grad}{
short=$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$,
long=gradient \acifused{rho}{of \ac{rho} (\acs{grad})}{(\acs{grad}) of \acl{rho} (\acs{rho})},
first-style=conditional,
}
\DeclareAcronym{gradtwo}{
short=$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$,
long=gradient of \acs{rho}
}
\ExplSyntaxOn
\NewDocumentCommand \acgrad {s}
{
\acro_begin:
\acro_reset_specials:
\acro_check_and_mark_if:nn {#1}{gradtwo}
\acro_if_acronym_used:nTF {gradtwo}
{
\acro_short:n {gradtwo}
}{
\acro_if_acronym_used:nTF {rho}
{
\acro_long:n {gradtwo}~(\acro_short:n {gradtwo})
}{
gradient~(\acro_short:n {gradtwo})~of~\acro_long:n {rho}~(\acro_short:n {rho})
}
}
\acro_end:
}
\ExplSyntaxOff
\begin{document}
\ac{grad}
\acuse{rho}
\acf{grad}
\ac{grad}
%\acreset{rho}
\acl{grad}
\hrule
\acreset{rho}
\acgrad
\acreset{gradtwo}
\acgrad
\acgrad
\acl{gradtwo}
\end{document}
Responder2
Como ninguém respondeu com o acro
pacote, aqui está uma solução usando glossaries-extra
. Isso define um estilo personalizado ofother
que verifica se o user1
campo foi definido. Se tiver, então o valor é considerado o rótulo para o outro símbolo e "de ..." é feito (caso contrário, não faz nada). Isso é feito com o \ofother
comando personalizado, que usa o rótulo como argumento:
\newcommand*{\ofother}[1]{%
\ifglshasfield{user1}{#1}%
{\space of \glsentrylong{\glscurrentfieldvalue}
(\glsxtrshort{\glscurrentfieldvalue})}%
{}%
}
O ofother
estilo personalizado que usa este comando é:
\newabbreviationstyle{ofother}
{%
\renewcommand*{\CustomAbbreviationFields}{%
name={\the\glsshorttok},
sort={\the\glslabeltok},
first={\the\glslongtok\space(\the\glsshorttok)},
description={\the\glslongtok\protect\ofother{\the\glslabeltok}}
}%
\renewcommand*{\GlsXtrPostNewAbbreviation}{%
\csdef{glsxtrpostlink\glscategorylabel}{%
\glsxtrifwasfirstuse
{%
\ofother{\glslabel}%
}%
{}%
}%
\glshasattribute{\the\glslabeltok}{regular}%
{%
\glssetattribute{\the\glslabeltok}{regular}{false}%
}%
{}%
}%
}
{%
\GlsXtrUseAbbrStyleFmts{long-short}%
}
Isso usa o gancho pós-link para anexar \ofother{\glslabel}
após o primeiro uso.
Você pode definir estilos diferentes de acordo com a categoria da entrada. Por exemplo:
\setabbreviationstyle[symbol]{long-short}
\setabbreviationstyle[of]{ofother}
\newabbreviation[category=symbol]{rho}{$\rho$}{electron charge density}
\newabbreviation
[category=of,user1=rho]
{grad}
{$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$}
{gradient}
No entanto, como \ofother
não faz nada se user1
não tiver sido definido, eles podem receber o mesmo estilo apenas com a abbreviation
categoria padrão:
\setabbreviationstyle{ofother}
\newabbreviation{rho}{$\rho$}{electron charge density}
\newabbreviation
[user1=rho]
{grad}
{$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$}
{gradient}
Aqui está um documento completo:
\documentclass{article}
\usepackage{bm}
\usepackage[shortcuts]{glossaries-extra}
\newcommand*{\ofother}[1]{%
\ifglshasfield{user1}{#1}%
{\space of \glsentrylong{\glscurrentfieldvalue}
(\glsxtrshort{\glscurrentfieldvalue})}%
{}%
}
\newabbreviationstyle{ofother}
{%
\renewcommand*{\CustomAbbreviationFields}{%
name={\the\glsshorttok},
sort={\the\glslabeltok},
first={\the\glslongtok\space(\the\glsshorttok)},
description={\the\glslongtok\protect\ofother{\the\glslabeltok}}
}%
\renewcommand*{\GlsXtrPostNewAbbreviation}{%
\csdef{glsxtrpostlink\glscategorylabel}{%
\glsxtrifwasfirstuse
{%
\ofother{\glslabel}%
}%
{}%
}%
\glshasattribute{\the\glslabeltok}{regular}%
{%
\glssetattribute{\the\glslabeltok}{regular}{false}%
}%
{}%
}%
}
{%
\GlsXtrUseAbbrStyleFmts{long-short}%
}
\setabbreviationstyle{ofother}
\newabbreviation{rho}{$\rho$}{electron charge density}
\newabbreviation
[user1=rho]
{grad}
{$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$}
{gradient}
\begin{document}
First use: \ac{grad}.
Next use: \ac{grad}.
Here's \ac{rho}.
Reset all.\glsresetall
First use again: \ac{rho} and \ac{grad}.
\end{document}
Isso produz:
O primeiro uso de grad
não desativa rho
. Se precisar ser desativado ao mesmo tempo, isso requer apenas uma pequena modificação em \ofother
:
\newcommand*{\ofother}[1]{%
\ifglshasfield{user1}{#1}%
{\space of \glsentrylong{\glscurrentfieldvalue}
(\glsxtrshort{\glscurrentfieldvalue}\glsunset{\glscurrentfieldvalue})}%
{}%
}
Se você quiser uma lista de todos os símbolos, o método mais simples é usar \printunsrtglossary
o qual listará todas as entradas definidas na ordem de definição:
\documentclass{article}
\usepackage{bm}
\usepackage[shortcuts]{glossaries-extra}
\newcommand*{\ofother}[1]{%
\ifglshasfield{user1}{#1}%
{\space of \glsentrylong{\glscurrentfieldvalue}
(\glsxtrshort{\glscurrentfieldvalue}\glsunset{\glscurrentfieldvalue})}%
{}%
}
\newabbreviationstyle{ofother}
{%
\renewcommand*{\CustomAbbreviationFields}{%
name={\the\glsshorttok},
sort={\the\glslabeltok},
first={\the\glslongtok\space(\the\glsshorttok)},
description={\the\glslongtok\protect\ofother{\the\glslabeltok}}
}%
\renewcommand*{\GlsXtrPostNewAbbreviation}{%
\csdef{glsxtrpostlink\glscategorylabel}{%
\glsxtrifwasfirstuse
{%
\ofother{\glslabel}%
}%
{}%
}%
\glshasattribute{\the\glslabeltok}{regular}%
{%
\glssetattribute{\the\glslabeltok}{regular}{false}%
}%
{}%
}%
}
{%
\GlsXtrUseAbbrStyleFmts{long-short}%
}
\setabbreviationstyle{ofother}
\newabbreviation{rho}{$\rho$}{electron charge density}
\newabbreviation
[user1=rho]
{grad}
{$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$}
{gradient}
\begin{document}
First use: \ac{grad}.
Next use: \ac{grad}.
Here's \ac{rho}.
Reset all.\glsresetall
First use again: \ac{rho} and \ac{grad}.
\printunsrtglossary[title=Symbols,nogroupskip]
\end{document}
Hámuitos estilos de glossário predefinidosse você não gosta do padrão.
Se você quiser usar, hyperref
certifique-se de que esteja carregado antes glossaries-extra
:
\usepackage[colorlinks]{hyperref}
\usepackage[shortcuts]{glossaries-extra}
(Em geral, hyperref
precisa ser carregado por último. Esta é uma das poucas exceções.)
Se você receber algum "erro de sequência de controle indefinido" no exemplo acima, verifique se possui versões atualizadas doglossaries
eglossaries-extra
.
Responder3
Com a atualização de ontem para v2.8 acro
tem a propriedade post
que permite acrescentar algo a uma sigla. Existe também o comando \aciffirst{true}{false}
com o qual você pode testar se a sigla é usada na primeira vez:
\documentclass{article}
\usepackage{acro,bm}
\DeclareAcronym{rho}{
short = $\rho$,
long = electron charge density
}
\DeclareAcronym{grad}{
short = $\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$,
long = gradient ,
post = \aciffirst{ of \ac{rho}}{}
}
\begin{document}
first use of grad:
\ac{grad}
\acs{grad}
\end{document}