![Определение Lyx-вставки, которая всегда имеет полную ширину строки в редакторе](https://rvso.com/image/309865/%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20Lyx-%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D0%B0%D1%8F%20%D0%B2%D1%81%D0%B5%D0%B3%D0%B4%D0%B0%20%D0%B8%D0%BC%D0%B5%D0%B5%D1%82%20%D0%BF%D0%BE%D0%BB%D0%BD%D1%83%D1%8E%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20%D0%B2%20%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B5.png)
Исправление: В исходном тексте я написал, что плавающие элементы отображаются на всю ширину. Это была ошибка; как и созданные с помощью "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
. Вставка затем указывается вВставить → ПоплавокРезультаты выглядят так
и скомпилированное поведение является правильным в обоих случаях.
Но есть ли простое решение, позволяющее добиться желаемого поведения без использования 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]и задавайте там дополнительные вопросы. Там эксперты знают больше, чем я.