定义 Lyx-inset,在编辑器中始终具有完整的线宽

定义 Lyx-inset,在编辑器中始终具有完整的线宽

更正: 在原文中,我写道浮动元素会全宽显示。这是一个错误;就像用 创建的“flexi-insets”一样,InsetLayout它们只有包含多行时才会全宽显示。因此,解决方法也无法按预期工作。

LyX 中有一些内置布局,Resources/layouts/stdlayouts.inc插入后会填充编辑器的整个宽度。此行为适用于原型布局BoxBox:<SpecificName>布局系列。浮动也适用类似的行为。

我想定义一个将段落包含在widetext环境中的本地布局。布局

InsetLayout WideText 
    LyXType          Custom
    LabelString      WideText
    LatexType        environment
    LatexName        widetext
    Decoration       classic
    LabelFont        
        Color        blue
        Size         Small
    EndFont
    MultiPar         true
    OptionalArgs     0
    Preamble
        \RequirePackage{widetext}
    EndPreamble 
End

这样做,但在 LyX 中,插图的显示宽度仅等于其内容的宽度——这不能很好地反映实际环境。我希望我的插图以框和浮动的样式显示,而不是以下任一样式:框总是包括一个小页面环境(这是不受欢迎的),并且浮动会导致序言发生不良变化,除非被黑客抑制(因此可能会在 LyX 的未来版本中中断)。

作为一种解决方法,我正在使用布局

Float
    Type         widetext
    GuiName      widetext
    IsPredefined true
End 

抑制序言中的条目IsPredefine,与定义相冲突widetext。然后,插入内容列在插入 → 浮动结果如下

Widetext 插入与伪浮动 并且在两种情况下编译的行为都是正确的。

但是,有没有一个干净的解决方案可以在不使用浮动黑客的情况下获得所需的行为?

答案1

据我所知,对于 Flex 插图来说这是不可能的。

查看源代码,我们发现 Inset.h 有以下内容

/// Is the width forced to some value?
virtual bool hasFixedWidth() const { return false; }

在 InsetFlex 的继承链中,此成员函数从未被覆盖。

盒子有以下内容(参见InsetBox.cpp):

bool InsetBox::hasFixedWidth() const
{
    return !params_.width.empty();
}

如果将该返回更改为return false;,那么它们也不会具有您所谈论的完整页面宽度。

请注意,当我将您的定义复制/粘贴到文档>设置>本地布局中时,我在终端上得到以下输出:

insets/InsetLayout.cpp (206): Flex insets must have names of the form `Flex:<name>'.
This one has the name `WideText'
Ignoring LyXType declaration.
LyX: Unknown InsetLayout tag [around line 2 of file  current token: 'Custom' context: '']
LyX: Unknown InsetLayout tag [around line 11 of file  current token: 'OptionalArgs' context: '']
LyX: Unknown InsetLayout tag [around line 12 of file  current token: '0' context: '']
frontends/qt4/GuiDocument.cpp (571): Format 49
InsetLayout "Flex:WideText"
    LyXType          Custom
    LabelString      WideText
    LatexType        environment
    LatexName        widetext
    Decoration       classic
    LabelFont        
        Color        blue
        Size         Small
    EndFont
    MultiPar         true
    ResetArgs   1
    Preamble
        \RequirePackage{widetext}
    EndPreamble 
    ResetsFont true
End

您可能想要纠正这些错误。

最后,请注意,我对 LyX 布局经验不多,因此以上任何内容都可能不准确。您应该加入我们的邮件列表[电子邮件保护]并在那里发布更多问题。那里的专家比我知道的更多。

相关内容