É possível ter quebra de linha como padrão, mas truncar algumas linhas em um buffer ao mesmo tempo?

8

Estou trabalhando com grandes tabelas LaTeX no AucTEX e seria útil exibi-las em linhas truncadas, como aqui:

insira a descrição da imagem aqui

As marcas vermelhas são os caracteres "&" que separam as colunas da tabela. No caso de tabelas com muitas colunas, o código fonte de látex para uma linha da tabela é maior que a emacslargura do quadro e, portanto, será, por padrão, agrupado em mais de uma linha. Mesmo assim align-current, isso tornará o código fonte da tabela muito difícil de ler e editar, portanto

  • para tabelas, prefiro que as linhas do código-fonte sejam truncadas (forçando-me a rolar horizontalmente)
  • enquanto para todas as outras latexfontes, eu preferiria word wrapajustá-lo à largura do quadro

No entanto, para o texto real no meu documento LaTeX, eu preferiria ter as word-wrapconfigurações normais .

Questão:

É possível usar word-wrapcomo padrão Emacse ainda ter alguns ambientes de látex no mesmo buffer como table, longtablee sidewaystablemostrado truncated ao mesmo tempo?

Também para alguns outros ambientes como equation, pycodeou tikzpicturetruncamento, parece ser mais apropriado. Portanto, pode ser uma boa ideia poder definir uma lista de ambientes que não são agrupados, mas truncados.

A quebra automática deve ser de quebra automática (ou seja, o texto é quebrado para preencher a coluna no buffer, mas isso não reflete no arquivo) e a quebra automática de uma linha recuada deve seguir o recuo da linha.

As soluções também devem funcionar para o emacs, mas também para o Aquamacs 2.5.

Existe uma postagem no blog que sugere ter uma solução (parcial), mas não encontrei a implementação: http://endlessparentheses.com/longlines-mode-in-latex.html

Principalmente inofensivo
fonte
3
Essa imagem é ilegível. Por favor, descreva com texto exatamente o que você quer dizer - "como aqui" não serve, neste caso.
Desenhou
1
Eu não acredito que o Emacs deixará você ter (setq word-wrap t) e (setq truncate-lines t)no mesmo buffer. Se você deseja word-wrapativar, o melhor que provavelmente será capaz de colocar é uma sobreposição invisível sobre o texto que você deseja truncar - factível, mas não trivial - o código para isso exigiria o uso vertical-motionapós cada comando com remoção / movimento / colocação de sobreposições.
lawlist
1
@lawlist: obrigado, eu esperava que fosse possível definir truncate-linestalvez apenas algumas partes de um texto (determinados ambientes no LaTeX), mas vejo que isso pode ser difícil de alcançar. Parece que vou ter que aprender a alternar word wrap/ truncaterapidamente. :)
MostlyHarmless
3
@ Martin Você pode vincular uma chave toggle-truncate-lines.
Kaushal Modi
2
@ Martin É possível fazer o que você está pedindo. Você precisará fazer alguns hackers por cima longlines-mode. Veja esta postagem para um exemplo. Vou escrever uma resposta completa mais tarde, se tiver tempo.
Malabarba

Respostas:

0

Depende exatamente do que você deseja fazer.

Nos comentários, Malabarba cria um link para uma postagem no blog que pode mostrar o caminho. No entanto, acho que essa abordagem depende (programaticamente) de modificar o texto do buffer. Se isso funciona para você - ótimo!

Se você deseja deixar o texto sem modificações, acho que você está sem sorte.

Para problemas como esse, geralmente começo lendo a seção do manual elisp na propriedade "display". Isso descreve as propriedades que podem ser aplicadas aos caracteres no buffer para afetar sua exibição.

Ao ler isso, não vi nada que controla se uma linha é ou não quebrada - apenas como exibir recuo e tal quando ocorre a quebra.

Então, por enquanto, acredito que a resposta é "não". Recentemente, houve uma conversa sobre o emacs-devel sobre a adição de recursos de empacotamento para exibir novamente, então talvez haja alguma esperança para o futuro.

Tom Tromey
fonte
1
Concordo que o uso de um modelo de modificação de buffer como ponto de partida (modo de palangres) é o método menos preferido. Discordo, respeitosamente, no entanto, da noção de que o pôster original pode estar sem sorte. Uma sobreposição com um 'invisible tou uma 'display ""propriedade não modificar o texto tampão e que sobreposição pode efetivamente visualmente truncar qualquer linha no buffer - isso pode ser feito de forma seletiva. Em outras palavras, word-wrappermanece ativo enquanto o truncamento direcionado pode ser feito com sobreposições.
lawlist
1
Bem ... então, acho que outra maneira de fazer isso é "preencher" o texto marcando alguns espaços com uma propriedade de exibição de substituição de cadeia contendo uma nova linha. Isso parece encerrar, talvez. No entanto - isso parece tão hostil quanto modificar o texto para fins de edição, pois a exibição será diferente do que se vê. Além disso, você precisaria de um código especial para manter o preenchimento atualizado, eu acho. Mas ... sim, talvez haja um caminho.
Tom Tromey