![Problema restante por resolver](https://rvso.com/image/472723/Problema%20restante%20por%20resolver.png)
Estoy creando un cancionero usando el paquete de canciones. Soy muy nuevo en LaTex y opté por usar el dorso, lo cual funcionó bien, el único problema que realmente tengo es con el índice. Estoy usando una plantilla base más antigua para el proyecto que ya tenía un archivo de índice funcional que puedo mostrar, pero el índice no se actualiza.
Mientras busco la documentación, creo que la solución está conectada a la línea:
texlua songidx.lua titlfile.sxd titlfile.sbx
Pero parece que no puedo encontrar ningún lugar donde poner esa línea al dorso. ¿Hay alguna forma de resolver esto o tengo que aprender a analizarlo localmente en mi computadora?
Actualización: Se agregó un MWE a continuación. Este ejemplo produce un índice vacío con el texto: "[Índice aún no generado.]" o si agrego el idxfile.sbx de una versión anterior del libro, todo el registro aparece como estaba hace años y no solo los dos. canciones en este ejemplo. Claramente, el idxfile.sbx tendría que reescribirse de alguna manera. Ahora al MWE que está dividido en dos, un archivo min (primer bloque) y un archivo incluido con las canciones en sí:
\documentclass[9pt,a6paper,openright,twoside]{extbook}
\usepackage[bookmarks]{hyperref}
\usepackage[top=15mm,bottom=15mm,left=15mm,right=10mm]{geometry}
%\addtolength{\oddsidemargin}{5mm}
\usepackage[lyric,noshading]{songs}
\usepackage{amsmath,amssymb}
\usepackage{amsfonts}
\usepackage{fancyhdr}
\usepackage{enumitem}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[swedish]{babel}
\usepackage{calligra}
\usepackage{lmodern}
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{imakeidx}
\usepackage{tikz}
\usepackage{textcomp}
\hypersetup{
colorlinks=false,
pdfborder={0 0 0},
}
\setlength{\sbarheight}{0.2pt}
\renewcommand{\stitlefont}{\bf\large}
\renewcommand{\notefont}{\itshape\small}
\makeatletter
\renewcommand\showindex[3][0]{%
\@ifundefined{SB@idxsel@#3}{\SB@errnoidx{#3}}{%
\expandafter\let\expandafter\SB@temp\csname SB@idxsel@#3\endcsname%
\SB@cnt#1\relax%
\ifnum\SB@cnt<\@ne\SB@cnt\SB@temp232\relax\fi%
\expandafter\SB@temp%
\expandafter\SB@maketitleindex%
\expandafter\SB@makescripindex%
\expandafter\SB@makeauthorindex%
\expandafter{\the\SB@cnt}%
{#2}{#3}%
}%
}
\makeatother
%%%% index
\renewcommand{\idxtitlefont}{\sffamily\small}%\itshape}
\renewcommand{\idxlyricfont}{\itshape\small}%\mdseries}
\renewcommand{\idxheadfont}{\calligra\bfseries\Huge}
\noversenumbers
\nosongnumbers
\songcolumns{0}
%%% Don't try to fill up every page
\raggedbottom
\setcounter{secnumdepth}{-1}
%%%%%%% Index
\newindex{index}{idxfile}
\scriptureon
\title{\large Sångbok
\vfill
\small Denna sångbok trycktes i 1000 exemplar. Detta är exemplar Nr. \rule{0.5cm}{0.5pt}
}
\date{}
\begin{document}
\maketitle
\indexsongsas{index}{\thepage}
\pagestyle{plain}
\newpage
\tableofcontents
\include{Text/bordsvisor}
\indexeson
\injectparagraph{%
\center Rak text: Sångtitel\ ~ \emph{Kursiv text: Första raden\\
\begin{center}
\line(1,0){250}
\end{center}}}
\showindex{Register}{index}
\end{document}
Y las canciones incluidas (Text/bordvisor.tex) están aquí:
\songchapter{Bordsvisor}
\thispagestyle{empty}
\begin{tikzpicture}[remember picture,overlay]
\node at (current page.center) {\includegraphics[width=\paperwidth]{bilder/kapitel/kap_bord.JPG}};
\end{tikzpicture}
\pagebreak
\begin{songs}{index}
\beginsong{Måltidssång}[sr={Fredmans sång nr 21},by={Text \& musik: Carl Michael Bellman},index={Så lunka vi så småningom}]
\beginverse
Så lunka vi så småningom
från Bacchi buller och tumult,
när döden ropar: Granne kom,
ditt timglas är nu fullt.
Du gubbe fäll din krycka ner,
och du, du yngling, lyd min lag,
den skönsta nymf som åt dig ler
inunder armen tag.
\endverse
\endsong
\beginsong{Spritbolaget}[by={Mel.: Du kära lille snickerbo'},index={Till spritbolaget ränner jag}]
\beginverse
Till spritbolaget ränner jag
och bankar på dess port.
Jag vill ha nå’t som bränner bra
och gör mig skitfull fort.
Expediten sade goddag,
hur gammal kan min herre va’?
Har du nå’t leg ditt fula drägg?
Kom hit igen när du fått skägg.
\endverse
\endsong
\end{songs}
Respuesta1
Puede descargar y copiar el songidx.lua
archivo en su directorio de trabajo al dorso (de ctan u otro recurso). Y luego use \write18
para ejecutar el comando texlua songidx.lua idxfile.sxd idxfile.sbx
que actualizará y escribirá el archivo de índice correcto (idxfile.sbx). He probado esto, desafortunadamente, es necesario clear cached files
o Recompile from scratch
cada vez para que el archivo se actualice correctamente. Alguien puede tener una mejor solución.
Agregue el código de seguimiento antes \begin{document}
:
\write18{texlua songidx.lua idxfile.sxd idxfile.sbx}
Respuesta2
Aquí tienes el 90% de una solución. Y sí: el problema clave se acerca a lo que sospechabas.
Comprobando problemas similares
¿Quién ya ha informado de problemas con el paquete de canciones y el índice?Mira aquí. Entre ellos estaba unsolución, que también se describe, más o menos, encap. 10 del manual de canciones:
- La clave aquí es copiar al menos el archivo
songidx.lua
al directorio de trabajo. - abriendo un shell de comandos, configúrelo en el directorio de documentos
- corriendo
pdflatex
ytexlua
como se describe en la solución varias veces
Copiando dicho archivo, y siguiendo dicha solución pude generar un cancionero con los dos índices deseados.
Probando su ejemplo en mi instalación local
Preparativos:
- A partir del análisis anterior, desactivé muchas partes de su código, que no contribuyeron al problema clave de crear un índice o podrían haber contribuido al problema.
- Copié
songidx.lua
allí, que en mi distribución está enC:\...\MiKTeX2\scripts\songs
(un enlace o configurar laPATH
variable también podría funcionar)
A continuación ejecuto:
- ...\songBookIndex>
pdflatex songBookIndex.tex
- ...\songBookIndex>
texlua songidx.lua idxfile.sxd
- ...\songBookIndex>
pdflatex songBookIndex.tex
canciónBookIndex.tex
\documentclass[9pt,a6paper,openright,twoside]{extbook}
\usepackage[bookmarks]{hyperref}
\usepackage[top=15mm,bottom=15mm,left=15mm,right=10mm]{geometry}
%\addtolength{\oddsidemargin}{5mm}
\usepackage[lyric,noshading]{songs}
%\usepackage{amsmath,amssymb}
%\usepackage{amsfonts}
\usepackage{fancyhdr}
%\usepackage{enumitem}
%\usepackage[T1]{fontenc}
%\usepackage[utf8]{inputenc}
\usepackage[swedish]{babel}
%\usepackage{calligra}
%\usepackage{lmodern}
%\usepackage{graphicx}
%\usepackage{fancyhdr}
%\usepackage{imakeidx}
%\usepackage{tikz}
%\usepackage{textcomp}
\hypersetup{
colorlinks=false,
pdfborder={0 0 0},
}
\setlength{\sbarheight}{0.2pt}
\renewcommand{\stitlefont}{\bf\large}
\renewcommand{\notefont}{\itshape\small}
%\makeatletter
%
%\renewcommand\showindex[3][0]{%
%\@ifundefined{SB@idxsel@#3}{\SB@errnoidx{#3}}{%
%\expandafter\let\expandafter\SB@temp\csname SB@idxsel@#3\endcsname%
%\SB@cnt#1\relax%
%\ifnum\SB@cnt<\@ne\SB@cnt\SB@temp232\relax\fi%
%\expandafter\SB@temp%
%\expandafter\SB@maketitleindex%
%\expandafter\SB@makescripindex%
%\expandafter\SB@makeauthorindex%
%\expandafter{\the\SB@cnt}%
%{#2}{#3}%
%}%
%}
%\makeatother
%%%% index
\renewcommand{\idxtitlefont}{\sffamily\small}%\itshape}
\renewcommand{\idxlyricfont}{\itshape\small}%\mdseries}
\renewcommand{\idxheadfont}{\calligra\bfseries\Huge}
\noversenumbers
\nosongnumbers
\songcolumns{0}
%%% Don't try to fill up every page
\raggedbottom
\setcounter{secnumdepth}{-1}
%%%%%%% Index
\newindex{index}{idxfile}
\scriptureon
\title{\large Sångbok
\vfill
\small Denna sångbok trycktes i 1000 exemplar. Detta är exemplar Nr. \rule{0.5cm}{0.5pt}
}
\date{}
\begin{document}
\maketitle
\indexsongsas{index}{\thepage}
\pagestyle{plain}
\newpage
\tableofcontents
%\include{Text/bordsvisor}
\input{bordsvisor}
%\indexeson
%\injectparagraph{%
%\center Rak text: Sångtitel\ ~ \emph{Kursiv text: Första raden\\
%\begin{center}
%\line(1,0){250}
%\end{center}}}
\showindex{Register}{index}
\end{document}
bordsvisor.tex:
\songchapter{Bordsvisor}
\thispagestyle{empty}
% \begin{tikzpicture}[remember picture,overlay]
% \node at (current page.center) {\includegraphics[width=\paperwidth]{bilder/kapitel/kap_bord.JPG}};
% \end{tikzpicture}
\pagebreak
\begin{songs}{index}
\beginsong{Måltidssång}[sr={Fredmans sång nr 21},by={Text \& musik: Carl Michael Bellman},index={Så lunka vi så småningom}]
\beginverse
Så lunka vi så småningom
från Bacchi buller och tumult,
när döden ropar: Granne kom,
ditt timglas är nu fullt.
Du gubbe fäll din krycka ner,
och du, du yngling, lyd min lag,
den skönsta nymf som åt dig ler
inunder armen tag.
\endverse
\endsong
\beginsong{Spritbolaget}[by={Mel.: Du kära lille snickerbo'},index={Till spritbolaget ränner jag}]
\beginverse
Till spritbolaget ränner jag
och bankar på dess port.
Jag vill ha nå’t som bränner bra
och gör mig skitfull fort.
Expediten sade goddag,
hur gammal kan min herre va’?
Har du nå’t leg ditt fula drägg?
Kom hit igen när du fått skägg.
\endverse
\endsong
\end{songs}
Probando esto al dorso
Crear un proyecto y copiar sus archivos (modificados) no hay problema. Sin embargo, no vi si podía ejecutar un shell de comandos en el dorso.
Simplemente copiar songidx.lua
no funcionó, por supuesto que no.
Así que intenté copiar los archivos creados localmente y funcionó (no inspeccioné cuáles son realmente necesarios). Así que al menos esto podría ser un bypass para ti:
- crear los índices en una instalación local
- copie el resultado a su proyecto al dorso
- no es bonito, falta el 10%, pero en fin...
Problema restante por resolver
¿Cómo ejecutar un shell de comandos en el dorso?
- ¿es eso posible?
- ¿si es así, cómo?
- ¿Funciona también con la cuenta gratuita?
- ¿Necesitas actualizar?
- ¿Se pueden automatizar las acciones necesarias (y ajustarlas a las necesidades individuales) con Overleaf?
¿Quizás hacia una solución?
Buscando command shell overleaf
encontré este tweet:
latexmkrc
... ¿qué es eso? Al menos parece lo suficientemente importante como para que al dorso haya un artículo al respecto.Cómo utilizar latexmkrc con Overleaf.
También puede encontrar preguntas aquí enTexto...
Ok, es hora de que se unan algunos usuarios más experimentados :)