我正在使用 songspackage 创建歌本。我对 LaTex 还很陌生,所以我选择使用 overleaf,它工作得很好,我唯一遇到的问题是索引。我正在为项目使用一个较旧的基础模板,它已经有一个可以显示的索引文件,但索引不会更新。
在搜索文档时,我认为解决方案与以下内容相关:
texlua songidx.lua titlfile.sxd titlfile.sbx
但我似乎找不到任何地方将这一行放在 overleaf 中。有什么办法可以解决这个问题吗?还是我必须学习如何在计算机上本地解析它?
更新:下面添加了一个 MWE。此示例要么生成一个带有文本的空索引:“[索引尚未生成。]”,要么如果我从旧版本的书中添加 idxfile.sbx,则整个寄存器将显示为几年前的样子,而不仅仅是此示例中的两首歌曲。因此显然 idxfile.sbx 必须以某种方式重写。现在来看看 MWE,它分为两个部分:一个最小文件(第一个块)和一个包含歌曲本身的包含文件:
\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}
包含的歌曲(Text/bordvisor.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}
答案1
您可以下载并将songidx.lua
文件复制到您的 overleaf 工作目录(来自 ctan 或其他资源)。然后使用\write18
运行命令texlua songidx.lua idxfile.sxd idxfile.sbx
,它将为您更新并写入正确的索引文件(idxfile.sbx)。我已经测试过这一点,不幸的是,您每次都需要clear cached files
或Recompile from scratch
才能使文件正确更新。有人可能有更好的解决方案。
在之前添加以下代码\begin{document}
:
\write18{texlua songidx.lua idxfile.sxd idxfile.sbx}
答案2
这是 90% 的解决方案。是的:关键问题与您所怀疑的很接近。
检查类似问题
谁已经报告了包歌曲和索引存在的问题?看这里。其中有一个解决方案,也或多或少地描述了歌曲手册第 10 章:
- 这里的关键是将至少一个文件复制
songidx.lua
到工作目录 - 打开命令 shell,设置到文档目录
- 运行
pdflatex
并texlua
按照解决方案多次
复制所述文件并按照所述解决方案,我可以生成一本包含所需两个索引的歌本。
在我的本地安装上尝试您的示例
准备工作:
- 从之前的分析来看,我禁用了代码的许多部分,这些部分与创建索引的关键问题无关,或者可能导致了问题
- 我复制到
songidx.lua
那里,在我的发行版上是C:\...\MiKTeX2\scripts\songs
(链接或设置PATH
变量也可以)
接下来我运行:
- ...\歌曲索引>
pdflatex songBookIndex.tex
- ...\歌曲索引>
texlua songidx.lua idxfile.sxd
- ...\歌曲索引>
pdflatex songBookIndex.tex
songBookIndex.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}
在 Overleaf 上尝试一下
创建项目并复制(修改过的)文件没有问题。但是,我不知道是否可以在 Overleaf 上运行命令 shell,如果可以,如何运行。
当然,仅仅复制songidx.lua
是行不通的。
因此,我尝试复制本地创建的文件,并且成功了(没有检查哪些是真正需要的)。所以至少这可以为你提供一条捷径:
- 在本地安装上创建索引
- 将结果复制到你的 Overleaf 项目
- 不太好,缺少了 10%,但无论如何......
尚待解决的问题
如何在 Overleaf 上运行命令 shell?
- 那可能吗?
- 如果是,怎么办?
- 它也适用于免费帐户吗?
- 你需要升级吗?
- 可以使用 Overleaf 来自动化所需的操作(并根据个人需求进行调整)吗?
或许可以找到解决方案?
我搜索command shell overleaf
了这条推文:
latexmkrc
...那是什么?至少它看起来很重要,Overleaf 上有一篇关于它的文章如何在 Overleaf 中使用 latexmkrc。
您还可以在这里找到有关TeXSE ...
好的,是时候让一些更有经验的用户加入:)