尝试恢复使用 LuaLateX 编译复杂项目的能力时(现在我可以找到/使用 documentclass)遇到了这个编译错误:
German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2019-04-04
(WL)))))) (/usr/share/texlive/texmf-dist/tex/latex/csquotes/csquotes.sty
(/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty)
(/usr/share/texlive/texmf-dist/tex/latex/csquotes/csquotes.def)
(/usr/share/texlive/texmf-dist/tex/latex/csquotes/csquotes.cfg))
(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.sty
(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype-luatex.def)
(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.cfg))
(/usr/share/texlive/texmf-dist/tex/lualatex/selnolig/selnolig.sty
=== Package selnolig, Version 0.302, Date 2015/10/26 ===
(/usr/share/texlive/texmf-dist/tex/lualatex/selnolig/selnolig-german-patterns.s
ty)
(/usr/share/texlive/texmf-dist/tex/lualatex/selnolig/selnolig-german-hyphex.sty
)) (/usr/share/texlive/texmf-dist/tex/latex/newfloat/newfloat.sty)
! Undefined control sequence.
<recently read> \newfloatsetup
l.276 within=none}
?
在本页讨论之后,我通过复制自定义类/包的内容生成了 MWE。在我看来,在我实际遇到任何自定义代码之前,错误就已经触发了。
这是我推测的 MWE:
\documentclass[%
fontsize=12,%
DIV=calc,%
BCOR=10mm,%
bibliography=totoc,%
% TODO: Change this for publication
oneside,%
]{scrbook}
% Seitenlayout
\RequirePackage[%
includehead,%
includefoot,%
footskip=0.8cm,%
left=2.5cm,%
right=5.5cm,%
top=1cm,%
bottom=1.2cm]{geometry}
% TODO: Das muss noch bearbeitet werden. Ganzseitige Notenbeispiele
% funktionieren noch nicht richtig mit lyluatex.
%
% Additional formatting for headers and footers
% (relevant for full-page music examples)
%\RequirePackage{scrlayer-scrpage}
%\pagestyle{scrheadings}
%\cfoot{--\,\pagemark\,--}
% Seitenlayout
\RequirePackage[%
includehead,%
includefoot,%
footskip=0.8cm,%
left=2.5cm,%
right=5.5cm,%
top=1cm,%
bottom=1.2cm]{geometry}
% Durchgehende Nummerierung von Fußnoten
% (gehört eigentlich nicht zu TOC, passt aber nirgends besser hin)
\RequirePackage{chngcntr}
\counterwithout*{footnote}{chapter}
% Teil-Inhaltsverzeichnisse pro Buchteil
% TODO: Das soll so nicht gemacht werden, minitoc ist nicht
% mit KOMA-Script kompatibel. Ich habe aber noch keine
% andere Lösung für \part-TOCs gefunden.
%\usepackage{minitoc}
%\setcounter{minitocdepth}{4}
% \subfiletoc
% Titel und TOC, die nur gesetzt werden, wenn wir uns
% in einem Subfile befinden.
% TODO: Das war eigentlich nur als Hilfe für während der Arbeit gedacht
% und wäre mit \part-TOCs obsolet.
% Ich glaube, damit könnte man das ganze \issubfile-Zeug entfernen.
% Momentan ist \subfiletoc »leer«.
% Check if we're in a subfile and set a flag
\makeatletter
\newcommand{\issubfile}{
\@ifclassloaded{subfiles}
{\def\subfiletest{true}}
{}
}
\makeatother
% Run it once
\issubfile
% Helper function that checks if a flag is set
\makeatletter
\newcommand*{\ifmacrodefined}[1]{%
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname #1\endcsname\relax
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi
}
\makeatother
% If we _are_ in a subfile
% then redefine the respective commands
%\ifmacrodefined{subfiletest}{
% \newcommand{\subfiletoc}{%
% \maketitle
% \setcounter{tocdepth}{3}
% \tableofcontents
% }
%}{
% \newcommand{\subfiletoc}{}
%}
\setcounter{tocdepth}{3}
%\newcommand{\subfiletoc}{%
%\let\maintocdepth\value{tocdepth}%
%\setcounter{tocdepth}{5}%
%\tableofcontents
%\setcounter{tocdepth}\maintocdepth
%\clearpage
%}
\newcommand{\subfiletoc}
% Grundlegende Einbindung der Lua-Funktionalität
% TODO: Hier ist mir noch nicht klar, wie das mit dem
% Fehlerhandling geht. lyluatex stellt Fehler besser dar.
\RequirePackage{luatexbase}
% Separates Kompilieren einzelner Kapitel
\RequirePackage{subfiles}
% Grafikdateien
\RequirePackage{graphicx}
% Farben
\RequirePackage{color}
% Bevorzuge bei Namenskonflikten PDF-Dateien vor PNG
\usepackage{grfext}
\PrependGraphicsExtensions*{.pdf}
% Einfügen von PDF-Seiten und -Dokumenten
% TODO: Kann das nicht gelöscht werden, wenn auch
% 'musicexamples' das Paket lädt?
\RequirePackage{pdfpages}
% Verwendet zum Einfügen von ganzseitigen Beispielen auf der
% nächsten Seite, ohne den Textfluss zu unterbrechen.
% TODO:
% a) das sollte von 'musicexamples' selbst eingebunden werden
% (=> kann hier entfernt werden)
% b) das funktioniert noch nicht im Zusammenhang mit lyluatex
\RequirePackage{afterpage}
% Listenformatierung
\RequirePackage{mdwlist}
\RequirePackage{paralist}
% Tabellenformatierung
\RequirePackage{booktabs}
% insbesondere lange Tabellen über Seitenumbruch hinaus
\RequirePackage{longtable}
% Fußnoten
% Formatierung
\usepackage{ragged2e}
\RequirePackage[ragged, hang]{footmisc}
\setlength{\footnotemargin}{3ex}
% Aufeinanderfolgende Fußnoten sollen durch ein Komma getrennt werden
% https://tex.stackexchange.com/questions/40072/incompatibility-between-footmisc-option-multiple-and-hyperref
\let\oldFootnote\footnote
\newcommand\nextToken\relax
\renewcommand\footnote[1]{%
\oldFootnote{#1}\futurelet\nextToken\isFootnote}
\newcommand\isFootnote{%
\ifx\footnote\nextToken\textsuperscript{,}\fi}
% Floatumgebungen mit umlaufendem Text
\RequirePackage{wrapfig}
% Mehrspaltiger Text
% TODO: Wird derzeit nur einmal für den Satz zweier Gedichte verwendet,
% dafür gibt es m.E. aber ein spezialisiertes Package
\RequirePackage{multicol}
% Mache Bildunterschriften konfigurierbar
\RequirePackage{caption}
% Lade die Lua-Funktionalität mit einem einzelnen Befehl
% (damit sie in den verschiedenen Packages genutzt werden kann)
\newcommand{\loadLuaFunctions}{%
\directlua{ lua = require(kpse.find_file("ulDissLua.lua") or "ulDissLua.lua")}}
% Dieses Package wird nur von dem Pandoc-generierten Code benutzt
% und kann nach Durcharbeiten des B-Teils gelöscht werden.
\RequirePackage{supertabular}
% Environment: material
%
% Vorläufig ausformulierter Text, der evtl. verwendet werden könnte.
% Oder Text, der herausgenommen wird, ohne ihn gleich zu löschen.
%
\newenvironment{material}{%
\begingroup
\color{blue}
\medskip
\noindent \textsf{Material}
\smallskip
\hrule
\begin{quote}}
{\end{quote}
\hrule
\medskip
\endgroup}
% Environment: stichworte
%
% Besondere Aufzählungsumgebung für die Gliederung und Planung der Arbeit.
% Standardtitel ist »Stichworte/Gliederung:«,
% kann durch optionales Argument geändert werden.
%
\newenvironment{stichworte}[1][Stichworte/Gliederung:]{%
{\color{red}{
\textbfsf{#1}
\medskip
\hrule}}
\begin{itemize}
}{%
\end{itemize}
{\color{red}{\hrule}}
\bigskip
}
% auffälliges »TODO« Element.
% Titel kann im optionalen Argument geändert werden.
\newcommand{\todo}[2][TODO: ]{{\color{red}{\textbf{\textsf{[#1#2]}}}}}
% Allgemeine Typografie-Einstellungen
\RequirePackage{fontspec}
\frenchspacing
\defaultfontfeatures{
Ligatures=TeX,
Scale=MatchLowercase,
Numbers=Proportional,
Numbers=OldStyle
}
% Schriftarten
\RequirePackage[osf,proportional]{libertine}
\setmonofont[Scale=MatchLowercase]{InconsolataN}
% Sprache
\RequirePackage[ngerman]{babel}
% Wird nur von biblatex verwendet
\RequirePackage{csquotes}
% Allgemeine typografische Verbesserungen
\RequirePackage{microtype}
\RequirePackage[ngerman]{selnolig}
% abbildung
%
% Modifiertes, zentriertes 'figure'-Environment
% TODO: ändern in 'manuskript', eigener Zähler, eigenes Verzeichnis
\newenvironment{abbildung}[1][htp]{
\begin{figure}[#1]
\centering}
{\end{figure}}
% Darstellung der Environments
\captionsetup[figure]{
format=plain,
font=small,
labelfont=sf,
within=none}
\captionsetup[abbildung]{
format=plain,
font=small,
labelfont=sf,
within=none}
有什么想法/提示可能导致这种情况的原因吗?
谢谢您的任何提示/想法。
答案1
这在 texlive 2019 中出现错误,但在 texlive 2021 中编译正常:
\documentclass[]{article}
\usepackage{caption}
\captionsetup[table]{
format=plain,
font=small,
labelfont=sf,
within=none}
\captionsetup[figure]{
format=plain,
font=small,
labelfont=sf,
within=none}
\begin{document}
abc
\end{document}
(c:/texlive/2019/texmf-dist/tex/latex/newfloat/newfloat.sty
Package: newfloat 2019/09/02 v1.1l Defining new floating environments (AR)
)
! Undefined control sequence.
<recently read> \newfloatsetup
l.69 within=none}
问题在于 newfloat 包是按组加载的。解决方法是在设置浮点数之前先加载它:
\documentclass[]{article}
\usepackage{caption}
\usepackage{newfloat}
\captionsetup[table]{
format=plain,
font=small,
labelfont=sf,
within=none}
\captionsetup[figure]{
format=plain,
font=small,
labelfont=sf,
within=none}
\begin{document}
abc
\end{document}
答案2
您显示的日志片段显示newfloat
包正在加载(但没有加载keyval
)\newfloatsetup
在之前扫描后未定义。
这意味着你拥有的东西本质上等同于
\documentclass{article}
\usepackage{graphicx}
{
\usepackage{newfloat}
}
\expandafter\newfloatsetup\expanded{
within=none}
\begin{document}
\end{document}
其产生的终端输出为
LaTeX2e <2021-11-15> patch level 1
L3 programming layer <2022-01-21>
(/usr/local/texlive/2021/texmf-dist/tex/latex/base/article.cls
Document Class: article 2021/10/04 v1.4n Standard LaTeX document class
(/usr/local/texlive/2021/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty
(/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty
(/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty)
(/usr/local/texlive/2021/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)
(/usr/local/texlive/2021/texmf-dist/tex/latex/graphics-def/pdftex.def)))
(/usr/local/texlive/2021/texmf-dist/tex/latex/newfloat/newfloat.sty)
! Undefined control sequence.
<recently read> \newfloatsetup
l.10 within=none}
?
最后几行与您显示的形式完全匹配。