
Quiero crear una lista como toc, lof, lot. Debería llamarse listofsongs o similar. La pregunta es: ¿Existe algún paquete que me permita crear listas similares o tengo que hacerlo todo yo solo?
¿Existe una lista de extensiones de archivos ya utilizadas en LaTeX? es decir, no debería usar MyDocument.toc porque esto causaría conflictos con la tabla de contenido.
Al final, debería poder escribir \listofsongs
como escribo \tableofcontents
y debería comportarse de manera similar.
Respuesta1
Probablemente puedas usar las macros del kernel LaTeX2e \@starttoc
y \addtocontents{<file-extension>}{<tokens>}
.
\addtocontents
escribirá (no expandido) en el archivo auxiliar algunas directivas para la escritura no expandida <tokens>
en el archivo \jobname.<file-extension>
en caso de que ese archivo esté abierto para entrada cuando el archivo auxiliar se procese al final de la ejecución de LaTeX.
\@starttoc{<file-extension>}
Hará que TeX lea/procese el archivo \jobname.<file-extension>
en caso de que ese archivo exista y luego lo destruya y luego lo cree de nuevo y lo abra para recibir entradas, de modo que cuando el archivo auxiliar se procese al final de la ejecución de LaTeX, ese archivo esté abierto. para entrada.
En caso de que desees hacer cosas más sofisticadas, echa un vistazo a la \addcontentsline
macro del kernel LaTeX2e.
Básicamente \addcontentsline{<file-extension>}{<command name>}{<tokens>}
escribirá en el archivo auxiliar algunas directivas para la escritura no expandida de la secuencia del token \contentsline{<command name>}{<tokens>}{<page number>}
en el archivo \jobname.<file-extension>
en caso de que ese archivo esté abierto para entrada cuando el archivo auxiliar se procese al final de la ejecución de LaTeX. Después de haber escrito \jobname.<file-extension>
durante el procesamiento del archivo auxiliar al final de la ejecución de LaTeX, encontrará esa directiva
\contentsline{<command name>}{<tokens>}{<page number>}
en él. Por lo tanto, esa directiva se llevará a cabo cuando, debido a \@starttoc
, el archivo \jobname.<file-extension>
se lea/procese.
\contentsline{<command name>}{<tokens>}{<page number>}
a su vez llamará a una macro \l@<command name>
que procesa dos argumentos, a saber, el <tokens>
argumento y el <page number>
argumento.
Cuando este mecanismo se usa con los comandos toc-file y seccionamiento, <command name>
será algo así como section
o subsection
producir la ejecución de las macros \l@section
o \l@subsection
también puede definir sus propias \l@..
-macros para sus propias categorías de rubrificación.
El \addtocontents...
-mecanismo \@starttoc{<file-extension>}
define, entre otras cosas, una secuencia de control \tf@<file-extension>
. Por lo tanto, para saber si ese mecanismo ya ha asignado un \write
identificador para escribir un archivo \jobname.<file-extension>
, puede usar la \@ifundefined
macro para verificar si la secuencia de control \tf@<file-extension>
ya está definida.
Pero esto sólo funciona mientras el paquete scrwfile no esté en uso. Por cierto: es posible que le interese el paquete scrwfile en caso de que desee crear muchas listas como toc, lof o lot en su documento. Puede encontrar más información sobre ese paquete en CTAN:https://www.ctan.org/pkg/scrwfile
El kernel LaTeX2e se explica y comenta en el archivo source2e.pdf que está disponible enhttps://www.ctan.org/pkg/source2e.
El \addtocontents
- \@starttoc
-mecanismo y la \addcontentsline
-macro que hace uso de ese mecanismo se explican en la sección denominada Archivo F ltsect.dtx → 59 Comandos de sección → 59.3 Tabla de contenido, etc.
\documentclass{article}
\usepackage{hyperref}
\usepackage{verbatim}
\makeatletter
\newcommand\l@songline[2]{%
\par Now we have data about another song:\\
Title of song: #1. Song is printed on page: #2.%
}%
\makeatother
\begin{document}
\LaTeX{} will now write directives to aux-file for writing the first
line into \jobname.weird. These directives will be carried out at
the end of the \LaTeX-run when the aux-file is read/processed in
case at that time the file \jobname.weird is open for writing to it.\\
\addtocontents{weird}{First line in file \jobname.weird.}%
\bigskip
This is what \jobname.weird looks like before calling \verb|\@starttoc|: \\
\verbatiminput{\jobname.weird}
\bigskip
This is how \verb|\l@songline| is defined:\\{%
\csname verbatim@font\endcsname\selectfont
\expandafter\meaning\csname l@songline\endcsname
}%
\bigskip
The file \jobname.weird is \csname @ifundefined\endcsname{tf@weird}{not}{already} allocated.
\bigskip
\LaTeX will now read/process \jobname.weird and then destroy that file
and create it anew and open it for writing. Thus at the end of the
\LaTeX-run, when the aux-file is read/processed, that file will be open
for writing to it:\bigskip
\csname @starttoc\endcsname{weird}%
\bigskip
The file \jobname.weird is \csname @ifundefined\endcsname{tf@weird}{not}{already} allocated.
\bigskip
\LaTeX{} will now write directives to aux-file for writing the second
line into \jobname.weird. These directives will be carried out at
the end of the \LaTeX-run when the aux-file is read/processed in
case at that time the file \jobname.weird is open for writing to it.\\
\addtocontents{weird}{Second line in file \jobname.weird.}%
\bigskip
Now two \verb|\addcontentsline|-entries for writing things to \jobname.weird
that need to be "rubrified" by means of applying the \verb|l@songgline|-macro.
\addcontentsline{weird}{songline}{Morning has broken}
\addcontentsline{weird}{songline}{Final Countdown}
\end{document}
Respuesta2
Lamentablemente, no hay ningún MWE en la pregunta. Entonces no sé qué es lo que realmente quieres hacer. Leyendo tu perfil supongo que estás usando scrbook
. Aquí hay una sugerencia que necesita un KOMA-Script actualizado.
\documentclass[listof=totoc,ngerman]{scrbook}[2016/06/14]% needs at least KOMA-Scritp version 3.21
\usepackage{babel}
\DeclareNewTOC[
type=song,
tocentryindent=0pt,
tocentrynumwidth=2.3em,
tocentrystyle=tocline,
tocentrylinefill=\hfill,
tocentryentryformat=\sffamily,
tocentrypagenumberformat=\sffamily
]{los}
\newcaptionname{ngerman}{\listsongname}{Liederverzeichnis}
\DeclareNewSectionCommand[
style=chapter,
level=0,
beforeskip=-1sp,
innerskip=0pt,
afterskip=\baselineskip,
font=\usekomafont{section},
prefixfont=\usekomafont{chapter},
pagestyle=plain
]{song}
\renewcommand\songformat{}
\renewcommand\addsongtocentry[2]{\addxcontentsline{los}{song}{#2}}
\usepackage{hyperref}
\begin{document}
\tableofcontents
\addchap{Einleitung}
Text
\listofsongs
\song{Ein Liedtitel}
\end{document}
Aquí hay otra versión que usa la clase estándar book
y el paquete KOMA tocbasic
. Pero tenga en cuenta que no sé cómo define su \song
comando o song
entorno:
\documentclass[ngerman]{book}
\usepackage{babel}
\usepackage{tocbasic}[2016/06/14]% needs at least KOMA-Scritp version 3.21
\DeclareNewTOC[
type=song,
tocentryindent=0pt,
tocentrynumwidth=2.3em,
tocentrystyle=tocline,
tocentrylinefill=\hfill,
tocentryentryformat=\sffamily,
tocentrypagenumberformat=\sffamily
]{los}
\newcaptionname{ngerman}{\listsongname}{Liederverzeichnis}
\usepackage{lipsum}
\usepackage{hyperref}
\begin{document}
\listofsongs
\clearpage
\phantomsection\addxcontentsline{los}{song}{Ein Liedtitel im Verzeichnis}
\section*{Ein Liedtitel}
\lipsum
\clearpage
\phantomsection\addxcontentsline{los}{song}{Ein anderer Liedtitel im Verzeichnis}
\section*{Ein anderer Liedtitel}
\end{document}