![Definieren eines Lyx-Inset, das im Editor immer die volle Zeilenbreite hat](https://rvso.com/image/309865/Definieren%20eines%20Lyx-Inset%2C%20das%20im%20Editor%20immer%20die%20volle%20Zeilenbreite%20hat.png)
Korrektur: Im Originaltext hatte ich geschrieben, dass Floats in voller Breite angezeigt werden. Das war ein Fehler; sie InsetLayout
werden, genau wie die mit erstellten „Flexi-Insets“, nur dann in voller Breite angezeigt, wenn sie mehr als eine Zeile umfassen. Daher funktioniert auch der Workaround nicht wie vorgesehen.
In LyX gibt es einige integrierte Layouts, Resources/layouts/stdlayouts.inc
die beim Einfügen die gesamte Breite des Editors ausfüllen. Dieses Verhalten gilt für das Prototyp-Layout Box
und die Box:<SpecificName>
Layout-Familie. Ein ähnliches Verhalten gilt für Floats.
Ich wollte ein lokales Layout definieren, das einen Absatz in die widetext
Umgebung einschließt. Das Layout
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
tut dies, aber in LyX wird das Inset nur so breit wie sein Inhalt angezeigt – was eine schlechte Darstellung der tatsächlichen Umgebung ist. Ich würde es vorziehen, wenn mein Inset im Stil von Boxen und Floats angezeigt würde, ohne eines von beiden zu sein: BoxenstetsFügen Sie eine Minipage-Umgebung hinzu (was unerwünscht ist) und Floats verursachen unerwünschte Änderungen an der Präambel, sofern sie nicht durch einen Hack unterdrückt werden (was daher in zukünftigen Versionen von LyX nicht mehr funktionieren kann).
Als Workaround verwende ich das Layout
Float
Type widetext
GuiName widetext
IsPredefined true
End
wobei IsPredefine
ein Eintrag in der Präambel unterdrückt wird, der mit der Definition der widetext
Umgebung kollidiert. Der Einschub wird dann aufgelistet inEinfügen → FloatDie Ergebnisse sehen so aus
und das kompilierte Verhalten ist in beiden Fällen korrekt.
Aber gibt es eine saubere Lösung, um das gewünschte Verhalten ohne den Float-Hack zu erreichen?
Antwort1
So wie ich das verstehe, ist dies bei Flex-Insets nicht möglich.
Wenn wir uns den Quellcode ansehen, sehen wir, dass Inset.h Folgendes hat
/// Is the width forced to some value?
virtual bool hasFixedWidth() const { return false; }
In der Vererbungskette zu InsetFlex wird diese Memberfunktion nie überschrieben.
Boxen haben Folgendes (siehe InsetBox.cpp):
bool InsetBox::hasFixedWidth() const
{
return !params_.width.empty();
}
Wenn Sie diese Rückgabe in ändern return false;
, haben sie auch nicht mehr die volle Seitenbreite, von der Sie sprechen.
Beachten Sie, dass ich beim Kopieren/Einfügen Ihrer Definition in Dokument > Einstellungen > Lokales Layout die folgende Ausgabe auf meinem Terminal erhalte:
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
Möglicherweise möchten Sie diese Fehler korrigieren.
Abschließend sei noch darauf hingewiesen, dass ich nur wenig Erfahrung mit Layouts in LyX habe, sodass die oben genannten Angaben falsch sein können. Sie sollten sich in unsere Mailingliste eintragen unter[email geschützt]und dort weitere Fragen stellen. Die Experten dort wissen mehr als ich.