.png)
Gibt es angesichts des folgenden MWE eine Möglichkeit, die Position der Kurzform bei der ersten Verwendung (vollständig) zu ändern, sodass sie nicht immer nach dem Drucken der Langform angezeigt wird?
\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}
Wenn nicht, könnte es einen neuen Befehlssatz geben, der innerhalb des \DeclareAcronym
Blocks verwendet werden kann? Die Deklaration könnte also stattdessen so aussehen:
\DeclareAcronym{grad}{
short=$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$,
long=gradient\short of \ac{rho}
}
Wo \short
würde durch ein Leerzeichen ersetzt werden (beachten Sie, dass vor kein Leerzeichen steht \short
), gefolgt von der eingeklammerten Kurzform? Ähnliche Befehle könnten bei \DeclareAcronym
Bedarf für andere Argumente hinzugefügt werden.
Antwort1
Das \DeclareAcroFirstStyle
Makro könnte in Zukunft eine Schnittstelle bereitstellen, um dies zu erreichen, aber mit den aktuellen Optionen, die ihm zur Verfügung stehen, konnte ich nichts ausarbeiten. So wie es aussieht, könnte ich zwei Möglichkeiten finden, dies zu tun, aber beide mit potenziellen Problemen, die andere beeinträchtigenacro
Merkmale.
Mithilfe des \acifused{<id>}{<true>}{<false>}
Makros können wir den long
Eintrag von anpassen, sodass \DeclareAcronym{grad}{<keys>}
sein Erscheinungsbild je nachdem, ob das Akronym rho
verwendet wurde, geändert wird. Leider scheint es nicht besonders einfach zu sein, Text an den ersten Eintrag anzuhängen. Stattdessen musste ich ein definieren, first-style
das nur die Langform ausgibt und die Kurzform in die Langform einschließt.
\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,
}
Dies erzeugt zwar die gewünschten ersten Auftritte, funktioniert aber nicht so gut mit \acl{grad}
, das immer noch eine eingeklammerte Kurzform erzeugt, also
\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}
Alternativeacro
ermöglicht die manuelle Erstellung von \ac
-ähnlichen Befehlen, die wir verwenden können, um etwas speziell für das grad
Akronym zu konstruieren, das manuell die entsprechende Lang- oder Kurzform zusammenstellt, je nachdem, ob sowohl das rho
als auch grad
(im Code unten gradtwo
) Akronyme verwendet wurden.
\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
Dies hat den Vorteil, dass die long
Version unverändert bleibt und mit minimalem zusätzlichen Aufwand \acgrad
anstelle von verwendet werden kann. \ac{grad}
Alle Varianten, die das Äquivalent von usw. erzielen sollen \Ac{grad}
, \acp{grad}
müssen jedoch manuell definiert werden, damit sie das entsprechende erste Auftreten gemeinsam haben.
Vergleich dieser beiden Strategien
\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}
Antwort2
Da niemand eine Antwort mit dem acro
Paket bereitgestellt hat, hier eine Lösung mit glossaries-extra
. Dies definiert einen benutzerdefinierten Stil ofother
, der überprüft, ob das user1
Feld festgelegt wurde. Wenn dies der Fall ist, wird der Wert als Bezeichnung für das andere Symbol verwendet und „von ...“ wird ausgeführt (sonst geschieht nichts). Dies wird mit dem benutzerdefinierten \ofother
Befehl durchgeführt, der die Bezeichnung als Argument verwendet:
\newcommand*{\ofother}[1]{%
\ifglshasfield{user1}{#1}%
{\space of \glsentrylong{\glscurrentfieldvalue}
(\glsxtrshort{\glscurrentfieldvalue})}%
{}%
}
Der benutzerdefinierte ofother
Stil, der diesen Befehl verwendet, ist:
\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}%
}
Dies verwendet den Post-Link-Hook zum Anhängen \ofother{\glslabel}
nach der ersten Verwendung.
Sie können je nach Kategorie des Eintrags unterschiedliche Stile festlegen. Beispiel:
\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}
Da jedoch \ofother
nichts passiert, wenn user1
es nicht festgelegt wurde, kann ihnen mit nur der Standardkategorie der gleiche Stil zugewiesen werden abbreviation
:
\setabbreviationstyle{ofother}
\newabbreviation{rho}{$\rho$}{electron charge density}
\newabbreviation
[user1=rho]
{grad}
{$\bm{\nabla}$\hspace{-1.2pt}$\bm{\rho}$}
{gradient}
Hier ist ein vollständiges Dokument:
\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}
Das Ergebnis:
Die erste Verwendung von grad
führt nicht zu einer Rücknahme rho
. Wenn es gleichzeitig zurückgenommen werden muss, ist nur eine kleine Änderung an erforderlich \ofother
:
\newcommand*{\ofother}[1]{%
\ifglshasfield{user1}{#1}%
{\space of \glsentrylong{\glscurrentfieldvalue}
(\glsxtrshort{\glscurrentfieldvalue}\glsunset{\glscurrentfieldvalue})}%
{}%
}
Wenn Sie eine Liste aller Symbole wünschen, verwenden Sie am einfachsten die Methode \printunsrtglossary
, bei der alle definierten Einträge in der Reihenfolge ihrer Definition aufgelistet werden:
\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}
Es gibtviele vordefinierte Glossarstilewenn Ihnen die Standardeinstellung nicht gefällt.
Wenn Sie es verwenden möchten, hyperref
stellen Sie sicher, dass es vorher geladen ist glossaries-extra
:
\usepackage[colorlinks]{hyperref}
\usepackage[shortcuts]{glossaries-extra}
(Muss im Allgemeinen hyperref
zuletzt geladen werden. Dies ist eine der wenigen Ausnahmen.)
Wenn Sie im obigen Beispiel Fehler wegen nicht definierter Steuersequenzen erhalten, überprüfen Sie, ob Sie aktuelle Versionen vonglossaries
Undglossaries-extra
.
Antwort3
Mit dem gestrigen Update auf v2.8 acro
gibt es die Eigenschaft post
, die es erlaubt, einem Akronym etwas voranzustellen. Außerdem gibt es den Befehl, \aciffirst{true}{false}
mit dem man testen kann, ob das Akronym beim ersten Mal verwendet wird:
\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}