エディターで常に完全な行幅を持つ Lyx インセットを定義する

エディターで常に完全な行幅を持つ Lyx インセットを定義する

修正: 元のテキストでは、フロートは全幅で表示されると書きました。これは誤りでした。 で作成された「flexi-insets」と同様に、フロートはInsetLayout複数の行を含む場合にのみ全幅で表示されます。したがって、回避策も意図したとおりには機能しません。

Resources/layouts/stdlayouts.incLyX には、挿入するとエディターの幅いっぱいに表示される組み込みレイアウトがいくつかあります。この動作は、プロトタイプ レイアウト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。インセットは次のようにリストされます。挿入 → フロート結果は次のようになります

ワイドテキストインセットと疑似フロート どちらの場合もコンパイルされた動作は正しいです。

しかし、float ハックを使用せずに目的の動作を実現するためのクリーンなソリューションはあるのでしょうか?

答え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のレイアウトについてあまり経験がないので、上記のどれかが間違っている可能性があります。メーリングリストにご参加ください。[メールアドレス]そこにさらに質問を投稿してください。そこにいる専門家は私よりも多くのことを知っています。

関連情報