Por que o SVG não é compatível com o backend do TeX?

Por que o SVG não é compatível com o backend do TeX?

Sempre me perguntei por que o SVG é um problema tão grande para muitas ferramentas de criação de documentos. Por exemplo, o MS Office não pode fazer isso, o Libre Office só pode usar SVGs muito simples e mesmo no Latex não podemos usá-los corretamente, mas eles precisam ser convertidos, manualmente e depois usados ​​como gráficos de bitmap ou automaticamente por ferramentas externas como o InkScape. Embora eu goste do InkScape, isso não é satisfatório.

Especialmente do Latex ou do TeX, eu esperava suporte ao SVG, já que tantas pessoas no mundo acadêmico o usam direta ou indiretamente e com tanta atenção aos detalhes, que parece estranho ter que seguir uma solução alternativa para incluir o SVG em uma obra. Seria muito bom ter um PDF com zoom ilimitado e linhas distintas ainda nítidas em um diagrama, por exemplo, em vez de alguma linha pixelizada, porque o SVG foi convertido antes de ser usado no PDF.

Então, por que ainda não temos suporte a SVG no backend do TeX? Seria tão difícil de implementar?

Não sei muito sobre o backend do TeX, basicamente apenas que ele existe e converte suas coisas em um arquivo PDF, então esta pergunta pode ser ingênua. Por outro lado, você tem suporte SVG em todos os navegadores e em quase todos os softwares visualizadores de imagens existentes, então acho que deveria ser possível ter isso. Talvez seja porque o próprio formato PDF não suporta a inclusão de SVGs, de modo que não faz sentido alterar o backend do TeX para permitir SVGs, até que o formato PDF seja alterado?

Responder1

Classicamente, o TeX não lida comqualquerformatos gráficos, o arquivo dvi contém apenas um ponteiro para um arquivo gráfico a ser incluído pelo driver dvi. O TeX só precisa saber o espaço a ser deixado, que pode ser lido a partir de um comentário do BoundingBox ou de argumentos opcionais em \includegraphics.

É (normalmente) muito mais fácil incluir um formato gráfico se for o formato que você está gerando para o documento, pois o driver dvi não precisa "entendê-los", apenas copie para o stream, por exemplo, dvipspode incluir Arquivos EPS, pois são copiados literalmente para a saída, da mesma forma, arquivos jpg e certos formatos de bitmap que podem ser convertidos de maneira mais ou menos trivial em bitmaps PostScript.

A situação com o pdftex é semelhante, exceto que ele não pode lidar com arquivos EPS, mas pode lidar com arquivos PDF novamente porque é muito mais fácil lidar com PDF se você estiver escrevendo PDF.

Para lidar com EPS no pdftex você precisa de um programa externo de tradução de EPS para PDF, que pode ser chamado por shell-escape do TeX, mas é conceitualmente (e de fato) bastante separado.

A situação com SVG é a mesma. Se você está produzindo SVG (por exemplo, driver dvisvgm dvi) é mais fácil incluir SVG do que EPS ou PDF, se por outro lado você está produzindo PostScript ou PDF então você precisa de um programa de conversão, geralmente incscape, no loop. Novamente, isso pode ser escondido atrás de um shell-escape e chamado do TeX, se necessário. No entanto, você deve converter o SVG para um formato escalável (PDF ou EPS) e não para um bitmap, se o objetivo final for incluí-lo em um documento PDF.

Responder2

Coloque-se no lugar de alguém que está escrevendo um compilador TeX.Existem muitos programas para converter imagens para um formato ou outro (inkscape, imagemagick's convert, ...); então por que você deveria gastar tempo suportando mais de um formato, o que seria essencialmente o mesmo trabalho que reimplementar um conversor do zero?

Em particular, o formato SVG contémTudo além da pia da cozinha: desde texto chinês bidirecional em um caminho curvo de Bézier renderizado em uma fonte personalizada usando um padrão de cor de fundo, até um texto completoIntérprete Javascript. Ah, que horror. Não, obrigado;seu tempo é melhor gasto corrigindo bugs e melhorando as funcionalidades principais.

(Ok, a maioria dos conversores não suporta o conjunto completo de funcionalidades do SVG, concordo, mas o conceito permanece.)

Então, na prática, você suporta apenas um formato (ou talvez um formato bitmap e um formato vetorial) e diz aos seus usuários para usarem uma das muitas ferramentas externas disponíveis para converter gráficos nele. Felizmente, a maioria deles são usuários inteligentes de UNIX, então eles conhecem um Makefile ou um script de construção.

Se você quer ser um cara excelente, pode suportar a conversão automática de epspara pdf, mas mesmo isso não é sua responsabilidade. Ou talvez você possa conversar com o latexmkmantenedor e pedir que ele apresentedependências personalizadas, então isso pode ser automatizado do lado deles.

DR:programadores não gostam de reinventar a roda.

Responder3

A criação de gráficos SVG é suportada através dodvisvgmpacote na distribuição TeXLive. Funciona convertendo arquivos DVI (produzidos por texe latexem vez de pdftexe pdflatex).

informação relacionada