Определение Lyx-вставки, которая всегда имеет полную ширину строки в редакторе

Определение Lyx-вставки, которая всегда имеет полную ширину строки в редакторе

Исправление: В исходном тексте я написал, что плавающие элементы отображаются на всю ширину. Это была ошибка; как и созданные с помощью "flexi-insets", InsetLayoutони отображаются на всю ширину только тогда, когда содержат более одной строки. Следовательно, обходной путь также не работает так, как предполагалось.

В LyX есть несколько встроенных макетов, Resources/layouts/stdlayouts.incкоторые при вставке заполняют всю ширину редактора. Это поведение применяется к макету прототипа 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. Вставка затем указывается вВставить → ПоплавокРезультаты выглядят так

Widetext Inset против псевдо-float и скомпилированное поведение является правильным в обоих случаях.

Но есть ли простое решение, позволяющее добиться желаемого поведения без использования 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 на 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, поэтому все вышесказанное может быть неверным. Вам следует подписаться на нашу рассылку по адресу[email protected]и задавайте там дополнительные вопросы. Там эксперты знают больше, чем я.

Связанный контент