![エディターで常に完全な行幅を持つ Lyx インセットを定義する](https://rvso.com/image/309865/%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%83%BC%E3%81%A7%E5%B8%B8%E3%81%AB%E5%AE%8C%E5%85%A8%E3%81%AA%E8%A1%8C%E5%B9%85%E3%82%92%E6%8C%81%E3%81%A4%20Lyx%20%E3%82%A4%E3%83%B3%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B.png)
修正: 元のテキストでは、フロートは全幅で表示されると書きました。これは誤りでした。 で作成された「flexi-insets」と同様に、フロートはInsetLayout
複数の行を含む場合にのみ全幅で表示されます。したがって、回避策も意図したとおりには機能しません。
Resources/layouts/stdlayouts.inc
LyX には、挿入するとエディターの幅いっぱいに表示される組み込みレイアウトがいくつかあります。この動作は、プロトタイプ レイアウトBox
とBox:<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のレイアウトについてあまり経験がないので、上記のどれかが間違っている可能性があります。メーリングリストにご参加ください。[メールアドレス]そこにさらに質問を投稿してください。そこにいる専門家は私よりも多くのことを知っています。