편집기에서 항상 전체 선 너비를 갖는 Lyx 삽입 정의

편집기에서 항상 전체 선 너비를 갖는 Lyx 삽입 정의

보정: 내가 쓴 원본 텍스트에서는 float가 전체 너비로 표시됩니다. 이것은 오류였습니다. 생성된 "flexi-insets"과 마찬가지로 InsetLayout두 줄 이상을 포함하는 경우에만 전체 너비로 표시됩니다. 따라서 해결 방법도 의도한 대로 작동하지 않습니다.

Resources/layouts/stdlayouts.incLyX에는 삽입 시 편집기의 전체 너비를 채우는 내장 레이아웃이 있습니다 . 이 동작은 프로토타입 레이아웃 BoxBox:<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. 그런 다음 인세트가 다음 목록에 나열됩니다.삽입 → 부동결과는 다음과 같습니다

와이드텍스트 삽입 및 의사 부동 두 경우 모두 컴파일된 동작이 정확합니다.

하지만 플로트 해킹 없이 원하는 동작을 얻을 수 있는 깔끔한 솔루션이 있을까요?

답변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 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의 레이아웃에 대한 경험이 거의 없으므로 위의 내용 중 하나라도 다를 수 있습니다. 당신은 우리의 메일링 리스트에 가입해야 합니다:[이메일 보호됨]거기에 추가 질문을 게시하세요. 거기 전문가들은 나보다 더 많은 것을 알고 있다.

관련 정보