![Definindo um Lyx-inset, que sempre tem largura de linha completa no editor](https://rvso.com/image/309865/Definindo%20um%20Lyx-inset%2C%20que%20sempre%20tem%20largura%20de%20linha%20completa%20no%20editor.png)
Correção: No texto original escrevi que os carros alegóricos são exibidos em largura total. Isto foi um erro; Assim como os "flexi-insets" criados com InsetLayout
eles só são exibidos em largura total quando contêm mais de uma linha. Portanto, a solução alternativa também não funciona conforme o esperado.
No LyX existem alguns layouts integrados Resources/layouts/stdlayouts.inc
que, quando inseridos, preenchem toda a largura do editor. Este comportamento se aplica ao layout do protótipo Box
e à Box:<SpecificName>
família de layouts. Comportamento semelhante se aplica a carros alegóricos.
Eu queria definir um layout local que incluísse um parágrafo no widetext
ambiente. O 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
faz isso, mas no LyX a inserção será exibida apenas na largura do seu conteúdo - o que é uma representação pobre do ambiente real. Prefiro que meu insert seja exibido no estilo de caixas e carros alegóricos, sem ser: Caixassempreincluem um ambiente de minipágina (o que é indesejável) e os floats causam alterações indesejáveis no preâmbulo, a menos que sejam suprimidos por um hack (que, portanto, pode falhar em versões futuras do LyX).
Como solução alternativa, estou usando o layout
Float
Type widetext
GuiName widetext
IsPredefined true
End
onde IsPredefine
suprime uma entrada no preâmbulo que entra em conflito com a definição do widetext
ambiente. A inserção é então listada emInserir → FlutuarOs resultados são assim
e o comportamento compilado está correto em ambos os casos.
Mas existe uma solução limpa para obter o comportamento desejado sem o float-hack?
Responder1
Pelo que entendi, isso não é possível para inserções Flex.
Olhando para o código-fonte, vemos que Inset.h tem o seguinte
/// Is the width forced to some value?
virtual bool hasFixedWidth() const { return false; }
Na cadeia de herança para InsetFlex, esta função membro nunca é substituída.
As caixas têm o seguinte (consulte InsetBox.cpp):
bool InsetBox::hasFixedWidth() const
{
return !params_.width.empty();
}
Se você alterar esse retorno para return false;
, eles também não terão a largura total da página da qual você está falando.
Observe que quando copio/colo sua definição em Documento > Configurações > Layout local, recebo a seguinte saída em meu terminal:
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
Você pode querer corrigir esses erros.
Por fim, observe que tenho pouca experiência com layouts no LyX, portanto, qualquer uma das opções acima pode estar errada. Você deve se juntar à nossa lista de discussão em[e-mail protegido]e poste mais perguntas lá. Os especialistas sabem mais do que eu.