Пользовательский список номеров страниц листинга не работает

Пользовательский список номеров страниц листинга не работает

Итак, я уже некоторое время использую этот конкретный шаблон latex и продолжаю добавлять и изменять его, чтобы он стал таким, каким я хочу. Недавно я попытался переформатировать, чтобы избавиться от начальных точек в TOC, LOF, LOT и LOL, и мне удалось удалить их все, обновив команду, \cftdotно это, похоже, не сработало для LOL.

Я использовал \titlecontentsкоманду из titletocпакета, чтобы изменить настройки LOL, но это нарушило выравнивание номеров страниц с остальными списками. Я пробовал \hfillи \titlerule*[0.0em]{.}до , \contentspageчтобы исправить проблему, но ни один из них не сработал.

Текущий рабочий пример демонстрируется с помощью \hfill.

\documentclass[12pt]{article}

\usepackage{geometry}
\geometry{letterpaper}
\geometry{margin = 1.0in}
 \usepackage[parfill]{parskip}
\usepackage{setspace}
\singlespacing

\usepackage[utf8x]{inputenc}
\usepackage{microtype}
\usepackage{listings}
\usepackage{graphicx}
\usepackage[justification = centering]{caption}
\usepackage[section]{placeins}
\usepackage{float}

\usepackage[nottoc,notlof,notlot]{tocbibind}
\usepackage[titles]{tocloft}
\usepackage{titletoc}
\renewcommand{\cftsecfont}{\rmfamily\mdseries\upshape}
\renewcommand{\cftsecpagefont}{\rmfamily\mdseries\upshape}
\renewcommand{\cftdot}{}
\renewcommand\lstlistlistingname{List of Scripts}
\renewcommand\lstlistingname{Script}
\contentsuse{lstlisting}{lol}
\titlecontents{lstlisting}[1.5em]
        {\hspace{2.3em}}
        {\contentslabel{2.3em}}
        {\hspace*{-2.3em}}
        {\hfill\contentspage}

\usepackage{hyperref}
\pdfoutput=1 
\hypersetup{
    unicode=false,
    pdftoolbar=true,
    pdfmenubar=true,
    pdffitwindow=true,
    pdfstartview={FitH},
    pdftitle={Title},
    pdfauthor={Author},
    pdfsubject={Subject},
    pdfcreator={Producer},
    pdfproducer={Producer},
    pdfdisplaydoctitle=true,
    pdfnewwindow=true,
    colorlinks=true,
    linkcolor=black,
    citecolor=black,
    filecolor=black,
    urlcolor=black
}

\begin{document}

\tableofcontents
\listoffigures
\listoftables
\lstlistoflistings


\section{Here is A Section}

\begin{figure}[H]
\centering
\includegraphics[width = 2cm]{boats}
\caption{A boat}
\end{figure}

\begin{table} [H]
\begin{center}
\begin{tabular}{ c | c }
Title 1 & Title 2 \\ \hline 
Stuff & More stuff 
\end{tabular}
\caption{A Table}
\end{center}
\end{table}

\begin{lstlisting}[language = Matlab, basicstyle = \scriptsize, numberstyle = \scriptsize, caption = A Listing]
%%
clear;clc;close all;format compact;
%%
x = 5;
y = 6;
x + y = z;
disp(z);
\end{lstlisting}

\end{document}

Как видно из примера ниже, номер страницы для листинга имеет отступ по какой-то причине, которую я не смог выяснить. Я уверен, что это легко, но я просто не нашел этого.
Пример вывода LaTeX

Обратите внимание, что я использую значительно больше пакетов и модификаций, чем указано здесь, но это самые основные из них, которые все равно будут компилироваться правильно.

решение1

tocloftподключается только к стандартным ToC, LoFа также LoTкомандам и файлам и тем, которые определены с использованием \newlistof.

Все это не покрывается для LoL, который использует традиционную настройку \l@...макросов like.

В listings.styмы находим

\def\l@lstlisting#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}

который является соответствующим макросом для настройки строки в списках содержимого. На следующем уровне глубже мы находим \@dottedtoclineкоторый является макросом ядра LaTeX, использующим \@dotsepв качестве разделительного пространства между двумя точками contentline. Значение по умолчанию — 4.5. При увеличении этого числа до 5000 (что действительно много), точки, скорее всего, здесь не будут видны.

Я не хотел менять \@dotsepглобально, поэтому я исправил \l@lstlistingкоманду (используя группу, чтобы сбросить настройки после \l@lstlistingиспользования)

\makeatletter % Patching to prevent interference
\xpatchcmd{\l@lstlisting}{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}{%
  \begingroup\renewcommand{\@dotsep}{5000}\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}\endgroup}{%
}{}
\makeatother

Вот код ( titletocсопутствующие вещи закомментированы)

\documentclass[12pt]{article}

\usepackage{geometry}
\geometry{letterpaper}
\geometry{margin = 1.0in}
 \usepackage[parfill]{parskip}
\usepackage{setspace}
\singlespacing

\usepackage[utf8x]{inputenc}
\usepackage{microtype}
\usepackage[demo]{graphicx}
\usepackage[justification = centering]{caption}
\usepackage[section]{placeins}
\usepackage{float}

\usepackage[nottoc,notlof,notlot]{tocbibind}
\usepackage{listings}
\usepackage[titles]{tocloft}
\usepackage{xpatch}
%\usepackage{titletoc}
\renewcommand{\cftsecfont}{\rmfamily\mdseries\upshape}
\renewcommand{\cftsecpagefont}{\rmfamily\mdseries\upshape}
\renewcommand{\cftdotsep}{\cftnodots}

\renewcommand\lstlistlistingname{List of Scripts}
\renewcommand\lstlistingname{Script}


\makeatletter % Patching to prevent interference
\xpatchcmd{\l@lstlisting}{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}{%
  \begingroup\renewcommand{\@dotsep}{5000}\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}\endgroup}{%
}{}
\makeatother
%\contentsuse{lstlisting}{lol}
%\titlecontents{lstlisting}[1.5em]
%        {\hspace{2.3em}}
%        {\contentslabel{2.3em}}
%        {\hspace*{-2.3em}}
%        {\hfill\contentspage}

\usepackage{hyperref}
\pdfoutput=1 
\hypersetup{
    unicode=false,
    pdftoolbar=true,
    pdfmenubar=true,
    pdffitwindow=true,
    pdfstartview={FitH},
    pdftitle={Title},
    pdfauthor={Author},
    pdfsubject={Subject},
    pdfcreator={Producer},
    pdfproducer={Producer},
    pdfdisplaydoctitle=true,
    pdfnewwindow=true,
    colorlinks=true,
    linkcolor=black,
    citecolor=black,
    filecolor=black,
    urlcolor=black
}

\begin{document}

\tableofcontents
\listoffigures
\listoftables
\lstlistoflistings


\section{Here is A Section}

\begin{figure}[H]
\centering
\includegraphics[width = 2cm]{boats}
\caption{A boat}
\end{figure}

\begin{table} [H]
\begin{center}
\begin{tabular}{ c | c }
Title 1 & Title 2 \\ \hline 
Stuff & More stuff 
\end{tabular}
\caption{A Table}
\end{center}
\end{table}

\begin{lstlisting}[language = Matlab, basicstyle = \scriptsize, numberstyle = \scriptsize, caption = A Listing]
%%
clear;clc;close all;format compact;
%%
x = 5;
y = 6;
x + y = z;
disp(z);
\end{lstlisting}

\end{document}

введите описание изображения здесь

Связанный контент