Ein `\crefmultilabelformat`-Befehl, der `\crefstripprefix`-Konstrukte für `\cref` zulässt

Ein `\crefmultilabelformat`-Befehl, der `\crefstripprefix`-Konstrukte für `\cref` zulässt

Meine Frage ist eine allgemeinere (und hoffentlich klarere) Formulierung vonDieses hier.

Mit dem Paket cleverefkann 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, \crefstripprefixum 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 #1für die erste Beschriftung des Bereichs steht und #2für die letzte Beschriftung steht, \creflabelformatkonfiguriert der Befehl Beschriftungen leider einzeln (nur Platzhalter #1verfügbar, die #2und #3passen den Hyperlink an, genau wie #3oben #6).

Die Ausgabe von \crefmit einer Reihe von Labels wird durch den Befehl optimiert \crefmultiformat, wobei ein Platzhalter #1in 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 #1beispielsweise für das erste gerenderte Etikett der Reihe und #2fü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, \crefmultiformatindem 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}

verwandte Informationen