Meine Frage ist eine allgemeinere (und hoffentlich klarere) Formulierung vonDieses hier.
Mit dem Paket cleveref
kann man bei der gleichzeitigen Referenzierung mehrerer beschrifteter Objekte entweder den Befehl multiformat verwenden \cref
, was beispielsweiseReferenzen 1, 2 und 3oder den Befehl „range format“ \crefrange
, was zuVerweise 1–3.
Wenn die beschrifteten Objekte 1a, 1b, 1c sind, kann das Bereichsformat angepasst werden, \crefstripprefix
um das gemeinsame Präfix zu entfernen.
\crefrangelabelformat{<type>}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
nachgebendReferenzen 1a–canstattReferenzen 1a–1c.
Etwas Ähnliches möchte ich mit dem Multiformat erreichen, nämlichReferenzen 1a, b und c. Im Gegensatz zu oben, wo #1
für die erste Beschriftung des Bereichs steht und #2
für die letzte Beschriftung steht, \creflabelformat
konfiguriert der Befehl Beschriftungen leider einzeln (nur Platzhalter #1
verfügbar, die #2
und #3
passen den Hyperlink an, genau wie #3
oben #6
).
Die Ausgabe von \cref
mit einer Reihe von Labels wird durch den Befehl optimiert \crefmultiformat
, wobei ein Platzhalter #1
in den Argumenten für jedes Label der Reihe steht, und zwar einzeln. Gibt es eine Möglichkeit, jedes Label zunächst einer Transformation zu unterziehen, die durch einen Befehl „ \crefmultilabelformat
“ mitzweiPlatzhalter, die #1
beispielsweise für das erste gerenderte Etikett der Reihe und #2
für jedes der anderen stehen würden?
\documentclass{article}
\usepackage{floatrow}
\usepackage{subcaption}
\usepackage{cleveref}
\crefrangelabelformat{figure}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\begin{document}
\begin{figure}
\ffigbox[\textwidth]{
\begin{subfloatrow}[3]
\ffigbox[\FBwidth]{\quad a \quad}{\caption{a}\label{sfig:a}}
\ffigbox[\FBwidth]{\quad b \quad}{\caption{b}\label{sfig:b}}
\ffigbox[\FBwidth]{\quad c \quad}{\caption{c}\label{sfig:c}}
\ffigbox[\FBwidth]{\quad d \quad}{\caption{d}\label{sfig:d}}
\end{subfloatrow}
}{\caption{cap}\label{fig:1}}
\end{figure}
%
\crefrange{sfig:a}{sfig:c} % renders 1a-c, juste like I want
\cref{sfig:a,sfig:b,sfig:d} % renders 1a, 1b and 1d, and I would like 1a, b, and d.
\end{document}
Antwort1
Hierzu ist kein neuer Befehl erforderlich. Dies kann mit dem vorhandenen Befehl erledigt werden, \crefmultiformat
indem die Präfixinformationen mithilfe eines Makros von der ersten Komponente an die anderen weitergegeben werden, und zwar wie folgt:
\documentclass{article}
\usepackage{floatrow}
\usepackage{subcaption}
\usepackage{cleveref}
\crefrangelabelformat{figure}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\crefmultiformat{figure}%
{\edef\mycrefprefixinfo{#1}figs.~#2#1#3}%
{ and~#2\crefstripprefix{\mycrefprefixinfo}{#1}#3}%
{, #2\crefstripprefix{\mycrefprefixinfo}{#1}#3}%
{, and~#2\crefstripprefix{\mycrefprefixinfo}{#1}#3}
\begin{document}
\begin{figure}
\ffigbox[\textwidth]{
\begin{subfloatrow}[3]
\ffigbox[\FBwidth]{\quad a \quad}{\caption{a}\label{sfig:a}}
\ffigbox[\FBwidth]{\quad b \quad}{\caption{b}\label{sfig:b}}
\ffigbox[\FBwidth]{\quad c \quad}{\caption{c}\label{sfig:c}}
\ffigbox[\FBwidth]{\quad d \quad}{\caption{d}\label{sfig:d}}
\end{subfloatrow}
}{\caption{cap}\label{fig:1}}
\end{figure}
\crefrange{sfig:a}{sfig:c} % renders "1a-c", just like I want.
\cref{sfig:a,sfig:b,sfig:d} % renders "1a, b, and d", just like you want.
\end{document}