Gibt es eine Möglichkeit, die Einschränkung des Cleveref-Pakets hinsichtlich der Zitierung von Subfloats zu beheben?

Gibt es eine Möglichkeit, die Einschränkung des Cleveref-Pakets hinsichtlich der Zitierung von Subfloats zu beheben?

Beim Verweisen auf Floats mithilfe \crefvon Befehlen kann es manchmal zu einem falschen Satz kommen. Das gilt insbesondere, wenn Subfloats enthalten sind.

Ein Beispiel: Wenn wir Float 1 mit zwei Subfloats haben, 1a and 2 to 5wird der Bereich fälschlicherweise so interpretiert, als stamme er von 1a to 5. Wenn außerdem sowohl 1aals auch 1bin der Quellcodereferenz enthalten sind, sollen alle im Quellcode enthaltenen Subfloats erwähnt werden, nicht nur eines davon (siehe Punkt 2). Die Ausgabe des Typeset wird unten angezeigt:

Bildbeschreibung hier eingeben

Diese Ausgabe wird mit dem folgenden Quellcode generiert:

\documentclass[twocolumn]{report}

\usepackage{float}
\usepackage{subfloat}
\usepackage{caption}
\usepackage{cleveref}
\usepackage{paralist}



\begin{document}


    \begin{subfigures}

        % Subfigure 1
        \begin{figure}[H]

            \centering
            \fbox{\Huge Figure 1a}


            \caption{Caption 1}
            \label{fig1a}

        \end{figure}


        % Subfigure 2
        \begin{figure}[H]

            \centering
            \fbox{\Huge Figure 1b}


            \caption{Caption 1b}
            \label{fig1b}

        \end{figure}


    \end{subfigures}


    % Figure 2
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 2}


        \caption{Caption 2}
        \label{fig2}

    \end{figure}


    % Figure 3
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 3}


        \caption{Caption 3}
        \label{fig3}

    \end{figure}


    % Figure 4
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 4}


        \caption{Caption 4}
        \label{fig4}

    \end{figure}


    % Figure 5
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 5}


        \caption{Caption 5}
        \label{fig5}

    \end{figure}


    % Figure 6
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 6}


        \caption{Caption 6}
        \label{fig6}

    \end{figure}



    \newpage
    Figures are correctly cited for different citation formats such as:

    \begin{enumerate}

        \item Multiple: \textbf{\cref{fig5,,fig3,,fig4,,fig2}}
        \item Range: \textbf{\cref{fig5,fig3,fig4}}
        \item Multiple and range: \textbf{\cref{fig2,fig4,fig3,fig6}}

    \end{enumerate}


    \vspace{5mm}
    But once subfigures are included, some citations formats do not work:

    \begin{enumerate}

    \item Multiple (works): \textbf{\cref{fig3,,fig4,,fig2,,fig1a}}
    \item Range: \textbf{\cref{fig1a,fig1b,fig5,fig3,fig4}} (the output should be \textbf{figs. 1a to 1b and 3 to 5})
    \item Multiple and range: \textbf{\cref{fig1a,fig2,fig4,fig3,fig6}} (the output should be \textbf{figs. 1a, 2 to 4 and 6})

    \end{enumerate}


\end{document}

Ich habe bereits eine Lösung, die das Problem mildert, allerdings nicht mit dem oben erwarteten Ergebnis.

Antwort1

Bildbeschreibung hier eingeben Wir können den neuen Float-Typ ( subfig) definieren fürcleveref

\crefformat{subfig}{fig. #1}
\crefrangeformat{subfig}{figs. #1 to #2}
\crefmultiformat{subfig}{figs. #1}{ and #1}{, #1}{ and #1}
\crefrangemultiformat{subfig}{figs. #1 to #2}{}{}{}

Dann definieren wir in der Präambel einen neuen Befehl:

\newcommand{\labelsf}[1]{ \label[subfig]{#1} } % a new command for labeling subfigures

labelsfkann jetzt zum Beschriften von Unterabbildungen verwendet werden.

Unten sehen Sie den vollständigen Quellcode:

\documentclass[twocolumn]{report}

\usepackage{float}
\usepackage{subfloat}
\usepackage{caption}
\usepackage{paralist}

\usepackage{cleveref}
\crefformat{subfig}{fig. #1}
\crefrangeformat{subfig}{figs. #1 to #2}
\crefmultiformat{subfig}{figs. #1}{ and #1}{, #1}{ and #1}
\crefrangemultiformat{subfig}{figs. #1 to #2}{}{}{}
\newcommand{\labelsf}[1]{ \label[subfig]{#1} } % a new command for labeling subfigures

\begin{document}


    \begin{subfigures}

        % Subfigure 1
        \begin{figure}[H]

            \centering
            \fbox{\Huge Figure 1a}


            \caption{Caption 1}
            \labelsf{fig1a}

        \end{figure}


        % Subfigure 2
        \begin{figure}[H]

            \centering
            \fbox{\Huge Figure 1b}


            \caption{Caption 1b}
            \labelsf{fig1b}

        \end{figure}


    \end{subfigures}


    % Figure 2
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 2}


        \caption{Caption 2}
        \label{fig2}

    \end{figure}


    % Figure 3
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 3}


        \caption{Caption 3}
        \label{fig3}

    \end{figure}


    % Figure 4
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 4}


        \caption{Caption 4}
        \label{fig4}

    \end{figure}


    % Figure 5
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 5}


        \caption{Caption 5}
        \label{fig5}

    \end{figure}


    % Figure 6
    \begin{figure}[H]

        \centering
        \fbox{\Huge Figure 6}


        \caption{Caption 6}
        \label{fig6}

    \end{figure}



    \newpage
    Figures are correctly cited for different citation formats such as:

    \begin{enumerate}

        \item Multiple: \textbf{\cref{fig5,,fig3,,fig4,,fig2}}
        \item Range: \textbf{\cref{fig5,fig3,fig4}}
        \item Multiple and range: \textbf{\cref{fig2,fig4,fig3,fig6}}

    \end{enumerate}


    \vspace{5mm}
    But once subfigures are included, some citations formats do not work:

    \begin{enumerate}

    \item Multiple (works): \textbf{\cref{fig3,,fig4,,fig2,,fig1a}}
    \item Range: \textbf{\cref{fig1a,fig1b,fig5,fig3,fig4}} (the output should be \textbf{figs. 1a to 1b and 3 to 5})
    \item Multiple and range: \textbf{\cref{fig1a,fig2,fig4,fig3,fig6}} (the output should be \textbf{figs. 1a, 2 to 4 and 6})

    \end{enumerate}


\end{document}

crefJetzt werden Unterabbildungen korrekt referenziert, aber der Nachteil dieser Lösung ist:

  • Wir können die Verwendungen von Floats nicht finden, indem wir auf ihre Beschriftungen doppelklicken, und wir können den Float-Quellcode auch nicht finden, indem wir auf die Beschriftung klicken
  • der Name des Floats kann manchmal zweimal wiederholt werden, was redundant ist

verwandte Informationen