Separação de estrutura e estilo de conteúdo em LaTeX?

Separação de estrutura e estilo de conteúdo em LaTeX?

Em HTML, ao longo da última década, houve um forte impulso em direção à separação completa da estrutura e do estilo do conteúdo. A maioria dos sites agora é construída usando HTML para marcação estrutural e CSS para apresentação dessa marcação. Isso torna muito fácil aplicar estilos diferentes ao mesmo conteúdo: se você não sabe o quão poderoso isso é, veja, por exemplohttp://www.csszengarden.com/. Existe um documento W3c que defendeseparação de marcação semântica e de apresentação.

Sou relativamente novo no LaTeX, mas já desenvolvo sites há algum tempo. Sim, são áreas diferentes, mas tentam fazer a mesma coisa: apresentar bem o conteúdo. Minha experiência com LaTeX nos últimos 6 meses me deixa com a sensação de que esse conceito de separação entre conteúdo e estilo não funcionou até agora no mundo TeX. Por exemplo, definir as regras de encapsulamento de uma célula de tabela em HTML+CSS é tão simples quanto adicionar uma classe à célula e adicionar uma linha ao seu documento CSS. No LaTeX, você precisa fazeralgo horrível assim.

Então, estou faltando alguma coisa ou é LaTeX? Este conceito de separação de conteúdo e estilo é usado no design do LaTeX? Está apenas mal implementado? É provável que seja melhor implementado em versões futuras (LaTeX3? ConTeXt?)?

Nota: Não quero ofender os desenvolvedores de LaTeX: o sistema é muito bom por muitos outros motivos. Acabei de ver esse buraco e pouca discussão em torno dele, e estou me perguntando por quê.

Responder1

História

Knuth escreveu o TeX no final da década de 1970 porque queria compor o material da melhor maneira possível, dadas as limitações de seu próprio conhecimento e da tecnologia disponível na época. É geralmente aceito que ele fez um ótimo trabalho, mas o que ele certamente não estava tentando fazer era estrutura e estilo separados.

Lamport escreveu LaTeX em meados da década de 1980, quando viu a necessidade de uma separação mais clara entre as duas áreas. O LaTeX foi revisado no início da década de 1990, e o kernel atual data de 1994 (com correções de bugs, é claro). Isso é anterior ao modelo HTML + CSS em algum tempo e, novamente, as limitações tecnológicas significavam que maiores complicações do LaTeX teriam sido impossíveis. (Em 1994, o LaTeX era quase grande demais para muitos PCs, e a equipe trabalhou duro para reduzi-lo.)

No mundo HTML, novas tags podem ser adicionadas e serão ignoradas pelos renderizadores que não as conhecem. Esse não é o caso do TeX: sequências de controle desconhecidas são erros. Portanto, não podemos simplesmente adicionar novos conceitos e esperar que os documentos existentes funcionem: isto érealmenteimportante. Portanto, as decisões tomadas em 1994 ainda têm importância para o LaTeX hoje.

O ConTeXt é mais recente e separa muito mais design do que o LaTeX pronto para uso. O ConTeXt também adota uma abordagem de estabilidade diferente do LaTeX, com uma perspectiva de desenvolvimento mais ativa para o kernel. No entanto, a abordagem ConTeXt é, em alguns aspectos, mais parecida com o TeX simples do que com o LaTeX, no sentido de que o ConTeXt mantém o design 'mais próximo do usuário' do que o LaTeX.

Entrada e saída

No mundo HTML, um documento é lido inteiramente na memória para construir o DOM para renderização. O TeX não funciona assim, pelo menos a menos que programemos tudo sozinhos. Em vez disso, o TeX lê uma linha e a processa antes de passar para a próxima linha. (LuaTeX pode alterar isso, mas acho que mesmo no ConTeXt ainda é verdade que o modelo TeX é o principal.) Como tal, as abordagens necessárias para alterar a aparência são muito diferentes.

Um aspecto importante a ter em conta quando se pensa nesta área é o que as pessoas pretendem como resultado. No mundo TeX, estamos focados na composição tipográfica de alta qualidade. Como tal, quase sempre haverá algum ajuste manual do design para refletir a realidade do conteúdo. Isso não é o que acontece no HTML 'bem escrito' e, embora possa ser expresso em XML, certamente quebra a separação estrita. Eu e outros argumentaríamos que isso não é ruim: você precisa de intervenção manual para obter os melhores resultados.

Tabelas

As tabelas são mencionadas especificamente na pergunta e acho que merecem consideração por si só. Em HTML, as tabelas têm sido usadas para diversos propósitos. No TeX, existe uma abordagem muito mais restrita para tabelas. As tabelas são feras famosas e complexas no mundo TeX, e Knuth destacou que é incrível que elas funcionem! Na maioria dos documentos tipográficos, as tabelas são usadas principalmente para 'tabelas formais' e têm uma gama bastante restrita de 'boas' aparências. Como tal, há menos necessidade de fornecer toda a gama de controles do tipo CSS.

Como canaaerus diz em sua resposta, o mundo TeX não é gerenciado por um comitê, mas por ninguém e, portanto, o que é implementado depende do que os usuários individuais desejam. Há uma variedade de pacotes de tabelas para LaTeX, além da abordagem ConTeXt, e o raw \halignem TeX simples. No entanto, eles estão tentando principalmente resolver outros problemas, o que indica onde está a prioridade para os usuários.

Olhando para frente

Como membro do Projeto LaTeX3, sei que certamente estamos discutindo uma melhor separação entre conteúdo e design. Uma questão que vale a pena ter em mente aqui é que o modelo HTML + CSS nem sempre se traduz bem no que queremos para a composição tipográfica. Existem algumas diferenças significativas entre as duas áreas, e isso significa que nunca será tão simples.

Qualquer abordagem melhor tem que funcionar com o TeX, tanto em termos de código quanto de interface. Nós temoscódigo experimentalpara lidar com o relacionamento entre objetos ('l3ldb'), mais a ideia de'modelos' para design, ambos nesta área.

Responder2

Embora esta separação entre conteúdo e marcação seja uma ideia que certamente não é estranha aos desenvolvedores e usuários do TeX, existem algumas diferenças fundamentais entre como o TeX e o HTML, bem como suas comunidades, funcionam.

HTML é, em sua essência, organizado centralmente. Existe um comité (nomeadamente o W3C), que desenvolve os padrões web. Então todos os autores de documentos HTML devem escrever de acordo com esses padrões e os desenvolvedores de interpretadores HTML (ou seja, principalmente navegadores da web) devem implementá-los.

Para o TeX, por outro lado, as coisas acontecem de maneira muito diferente. Não existem padrões definitivos. Certamente a maioria das coisas é baseada no TeX original de Knuth. Mas muitas coisas foram adicionadas. Por exemplo, existem agora diferentes pacotes de macros, ConTeXt e LaTeX. Lá você pode ver facilmente como a sintaxe básica já não está fixa. Qualquer um poderia dizer que deseja usar /macros em vez de \como o LaTeX faz. Além disso, muitas das funcionalidades usadas hoje são adicionadas como pacotes. Eles tornam o TeX extremamente extensível.

Isso nos leva à parte técnica da diferença. TeX é Turing completo! Em vez disso, o HTML é apenas uma linguagem de marcação. No HTML você especifica o conteúdo, estrutura e estilo do seu documento, no TeX você escreve um algoritmo de como construir o seu documento.
É claro que nos casos mais simples, você não precisa usar construções de programação complicadas e, portanto, um documento TeX não parece diferente de ter sido escrito em uma linguagem de marcação. Mas eu diria que, no que diz respeito a este tipo de documentos, a separação de conteúdo e marcação é aplicada muito bem no TeX.

Se você olharo exemplovocê deu, esse é exatamente o ponto onde os documentos deixam de ser marcados.

Responder3

Este conceito de separação de conteúdo e estilo é usado no design do LaTeX? Está apenas mal implementado?

É usado e não é necessariamentemalimplementado (veja as outras respostas para uma perspectiva histórica). Em vez disso, é implementado de uma forma bastantenível baixo.

Vocêpodeuse absolutamente uma separação rigorosa de conteúdo e estilo em LaTeX (e na verdade eu recomendo fortemente fazer isso). Mas para fazer isso você precisa aproveitar a capacidade do LaTeX de definir macros.

LaTeX tem umalgunsmacros semânticas como \chaptere \emph(é claro que existem muitas mais). Existem classes e pacotes de documentos que oferecem muito mais opções. Por exemplo, as classes de script KOMA fornecem uma série de macros paracustomizara aparência das macros semânticas fornecidas pelo LaTeX.

Mas, na prática, a semântica necessária depende muito do tipo de documento que você está escrevendo. Portanto, existem classes de documentos como scrlttr2as que fornecem macros semânticas para a tarefa específica de escrever uma carta, mas essas são a exceção:Em vez de fornecer uma série de macros semânticas altamente específicas de domínio, o LaTeX fornece uma linguagem para construir macros específicas de domínio..

Em última análise, seu documento deve estar livre de macros de layout físico e usar exclusivamente macros semânticas. \textbf? Não, use uma macro descrevendopor quevocê quer texto em negrito.

Por serem tão específicas do domínio, a maioria das macros necessárias provavelmente será escrita por você mesmo. É por isso que muitos pacotes LaTeX fornecem as ferramentas para tornar isso o mais fácil possível. Por exemplo, existem pacotes para personalizar a exibição de figuras (ou para criar tipos de figuras personalizados; veja captionou float); existem pacotes que facilitam a escrita de macros poderosas ( etoolboxe a maior parte do LaTeX3). E existem pacotes para muitos casos de uso especiais, como destacar o código-fonte.

Com eles, é relativamente simples, na maioria dos casos, reunir um conjunto simples de macros semânticas que podem ser usadas em todo o documento. Ainda assim, as definições macro da minha tese de mestrado ocupam cerca de um sexto (no SLOC, comentários removidos) do documento completo.

Responder4

Certamente concordo que a separação entre estrutura e estilo é uma das vantagens fundamentais do LaTeX e do ConTeXt. Dito isto, na prática é difícil evitar misturá-los totalmente. Acontece que apenas documentos muito simples podem ter estilo e conteúdo completamente separados. Um caso da vida real de um livro de tamanho modesto quase sempre requer algum ajuste fino de último momento, o que efetivamente destrói sua separação. Para mim, como editor, a solução mais prática para conseguir 100% de separação é sempre manter o conteúdo em um arquivo xml que defina a estrutura do documento e ter todas as instruções relacionadas ao estilo em um arquivo ConTeXt. Acontece que o ConTeXt é um processador xml muito prático. Claro que você pode criar facilmente um arquivo LaTeX usando XSLT do seu xml e usar LaTeX se preferir. Neste caso você deve colocar todas as instruções relacionadas ao estilo em seu arquivo xsl.

informação relacionada