اللاتكس: كيفية جعل القوائم الفرعية استخدام عدادات قائمة، TOC، الخ

StackOverflow https://stackoverflow.com/questions/1517926

سؤال

لدي ماكرو يقوم بأرقام جنبا إلى جنب، أدناه. يستخدم Subfloats، لذلك يذهب في الشكل.

\newcommand{\listbylist}[6][showlines=true]{
   \begin{figure}
      \subfloat[ ]{
        \lstinputlisting[showlines=true,#1]{#2}                                                  
     \label{#4:A}
  }
  \hfill{}
  \subfloat[ ]{                                                                               
     % by setting the frame to leftline, we avoid a box into oblivion                         
     % turn off numbers                                                                       
     \lstinputlisting[showlines=true,frame=leftline,#1,numbers=none]{#3}                      
     \label{#4:B}                                                                             
  }                                                                                           
  \hfill{}
   \caption[#5]{#6}
       \label{#4}                                                                                         
   \end{figure}
}

لسوء الحظ، هذا يستخدم عدادات الشكل، وليس القوائم منها. كما أنه يظهر في جدول المحتويات الخاطئ، ويستخدم كلمة "الشكل" بدلا من "القوائم" في التسمية التوضيحية، والمراجع إليها، إلخ. هل هناك طريقة لتصحيح هذا؟

أفضل طريقة بسيطة، مثل إضافة كلمة "قائمة" في مكان ما ...

هل كانت مفيدة؟

المحلول

بدلا من استخدام تعويم LSTListings المدمج، لفها في تعويم مخصص:

\begin{mylisting}
\begin{lstlisting}
int x = 1;
\end{lstlisting}
\end{mylisting}

ثم استخدم نفس التعويم (MyLosting) لاستخدام SubFloat:

\newcommand{\listbylist}[6][showlines=true]{
  \begin{mylisting}
    \subfloat[ ]{
      ...
    }
    \hfill{}
    \subfloat[ ]{
      ...
    }
    \hfill{}
    \caption[#5]{#6}
    \label{#4}
  \end{mylisting}
}

هذا يحتاج إلى أن يتم إعداد جميعها في الديباجة:

\newfloat{mylisting}{tbphH}{lopbl}[chapter]
\floatname{mylisting}{Listing}
\newsubfloat{mylisting}
\newcommand{\listofmylistings}{\listof{mylisting}{List of Listings}}
% if you use the hyperref package
\providecommand*\theHmylisting{\themylisting}

نصائح أخرى

قد ترغب في إلقاء نظرة على وثائق SubFloat. أنا متأكد من أن هناك مكالمة ماكرو تجعل عدد فرعي في بيئة "الشكل". يمكنك محاولة وإعادة تعريف مواجهة البيئة "الشكل" إلى "القوائم" - إذا كان ذلك منطقي على الإطلاق.

حسنا، هذه هي الإجابة الخاطئة، لكنني فعلت تقريبيا الحصول على هناك مثل هذا. فشل فقط في إضافة تعليق إلى اليمين \listof.

كدنا نصل. ربما يمكن القيام به بشكل أفضل، ولكن هذا تقريبيا يعمل. كل ما تركه هو جعل التسمية التوضيحية تظهر في ملف .lol، وليس ملف .loc. سأطرح سؤالا عن ذلك، ثم قم بإصلاح هذه الإجابة.

في الأساس، يعود هذا فقط إلى عداد "الشكل"، ونسخ على عداد "القوائم". بعد الرقم، يضعهم مرة أخرى.

% Need a counter to save the value to
\newcounter{pbsavefigurecounter}

\newcommand{\listbylist}[6][showlines=true]{
{% scope

   % Change ``Figure'' to ``Listing''
   \renewcommand{\figurename}{Listing}

   % save the figure counter
   \setcounter{pbsavefigurecounter}{\value{figure}}

   % copy the listings counter to the figure counter
   \setcounter{figure}{\value{lstlisting}}


   \begin{figure}
  \subfloat[ ]{
     \lstinputlisting[nolol,showlines=true,#1]{#2}
     \label{#4:A}
  }
  \hfill{}
  \subfloat[ ]{
     % by setting the frame to leftline, we avoid a box into oblivion
     % turn off numbers
     \lstinputlisting[nolol,showlines=true,frame=leftline,#1,numbers=none]{#3}
     \label{#4:B}
  }
  \hfill{}

%  \float@caption{lol}[#5]{#6}
   \label{#4}
   \end{figure}

   % Update the listings counter
   \setcounter{lstlisting}{\value{figure}}

   % Restore the figure counter
   \setcounter{figure}{\value{pbsavefigurecounter}}

   % Change ``Listing'' back to ``Figure''
   \renewcommand{\figurename}{Figure}
}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top