Definindo um Lyx-inset, que sempre tem largura de linha completa no editor

Definindo um Lyx-inset, que sempre tem largura de linha completa no editor

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 InsetLayouteles 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.incque, quando inseridos, preenchem toda a largura do editor. Este comportamento se aplica ao layout do protótipo Boxe à 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 widetextambiente. 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 IsPredefinesuprime uma entrada no preâmbulo que entra em conflito com a definição do widetextambiente. A inserção é então listada emInserir → FlutuarOs resultados são assim

Inserção de texto largo vs pseudo-flutuante 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.

informação relacionada