我有一个自定义布局文件,它附加到我的文档中并由 Lyx 使用。该文件的格式为~/.lyx/layouts
。
这个问题告诉如何通过菜单向序言中添加一行:
\renewcommand\partname{Act}
如果可能的话,我希望将所有格式保留在布局文件中,并避免在 Lyx 菜单中设置内容。
所以我把这一行添加到Preamble
我的布局文件的部分,并尝试
\renewcommand{\partname}{Experiment}
但它不起作用。重新配置、重新启动并重新渲染 PDF 后,这些部分仍然称为“部分”。
有没有办法让布局文件中的这个改变(“part”到“act”)起作用?
有没有一种方法可以让编辑器从布局文件内部反映这种变化,而无需改变类的默认定义book
(我的布局文件扩展了它)。
我的 Lyx 版本是 Linux 上的 2.2.3。
更新:可能\renewcommand{\partname}{Act}
是错误的命令,因为如果您将它放在 Lyx 文档设置中的 LATEX 前言部分中,它也不起作用。
更新二:这是一个简化的布局文件:
# \DeclareLaTeXClass[book]{book (My Book Style)}
# Input general definitions
Input stdclass.inc
MaxCounter Counter_Section
SecNumDepth 3
Preamble
% Tell the TOC not to include any levels below "chapter"
\setcounter{tocdepth}{0}
% Change "Part" to "Act"
\AtBeginDocument{\renewcommand{\partname}{Act}}
EndPreamble
答案1
我认为问题出在 babel,因为它\partname
每次发出时都会重新定义\setlanguage{<lang>}
(例如在文档的开头),请参见上面的问题这里。
正如那篇文章所建议的,我们需要使用\addto\extrasenglish{\renewcommand{\partname}{Act}}
而不是\renewcommand{\partname}{Act}
。问题是 lyx 在前言的末尾加载 babel,因此添加\addto\extrasenglish{\renewcommand{\partname}{Act}}
布局键“Preanble”不起作用,因为命令会在定义之前展开。
因为 lyx 有用于段落布局的“LangPreamble”键(请参阅 lyx 自定义指南中的第 5.3.8 节)。您不能直接在布局类文件中使用此键,而只能在段落布局的定义中使用,因此我们将重新定义 Part 布局,使其与 完全相同,stdclass.inc
但使用我们想要的 LangPreamble。
# \DeclareLaTeXClass[book]{book (My Book Style)}
# Input general definitions
Input stdclass.inc
Style Part
Category Sectioning
Margin Dynamic
LabelString "Part \thepart"
LabelType Static
TocLevel -1
LabelCounter part
LatexType Command
LatexName part
NeedProtect 1
NextNoIndent 1
ToggleIndent Never
Labelsep xxx
ParSkip 0.4
TopSep 4
BottomSep 4
ParSep 0.8
Align Center
Alignpossible Center
Argument 1
LabelString "Short Title|S"
Tooltip "The part as it appears in the table of contents/running headers"
InsertCotext 1
IsTocCaption 1
EndArgument
Font
Series Bold
Size Huge
EndFont
HTMLTag h1
LangPreamble
\addto\captionsenglish{\renewcommand{\partname}{Act}}
EndLangPreamble
End
MaxCounter Counter_Section
SecNumDepth 3
Preamble
% Tell the TOC not to include any levels below "chapter"
\setcounter{tocdepth}{0}
EndPreamble