Я хочу сделать доступными около 2000 графических изображений (смайлики) для латекса пользователей. Все они находятся в отдельных файлах SVG (около 1–10 КБ) с изначально квадратным соотношением сторон, но также есть автоматически сгенерированный файл спрайт лист, содержащий их все как <symbol>s. Поскольку само число превышает некоторые ограничения (например, предварительный просмотр Github ограничен 1000), а небольшой размер файла тратит много места в файловых системах с большим размером блока, а также потенциально требует много сетевых запросов (например, HTTP 1.x), Я думаю поместить их в один файл PDF в виде отдельных страниц. Соответствующие пакеты Latex поддерживают добавление определенных страниц из PDF-файлов в качестве графики, но я не нашел способа (пока) использовать SVG символы. Поэтому в настоящее время я предпочитаю решение в формате PDF. Однако, хотя я знаю, как преобразовать один SVG в одностраничный PDF, например. грамм. используя Inkscape, я не уверен, какие программы использовать для создания небольшого, быстрого и переносимого (например, на основе npm) сценария для создания одного многостраничного PDF-файла либо из сотен файлов SVG, либо из одного спрайт-листа SVG. Любой совет? В идеале 4+ шестнадцатеричных цифры, из которых состоят имена файлов SVG, будут использоваться для сортировки и, возможно, маркировки страниц PDF.
Для требования «одно изображение на странице», возможно, стоит взглянуть на класс документа standalone. Например, в режиме tikz он ставит один tikzpicture на страницу, что-то подобное можно сделать и для svg.



Это вдохновлено подход, которое я использовал в другом ответе. Чтобы сделать визуализацию <symbol> видимой, вы можете использовать XSLT-преобразование, поместив каждую иконку в отдельный контейнер <svg> на HTML-странице. Затем распределите их на отдельные страницы с помощью правила CSS @media print. Таким образом, вы можете открыть файл в браузере и распечатать его в формате PDF оттуда.
Во-первых, вы должны добавить эту строку в начало вашего спрайт-листа:
<?xml-stylesheet type = "text/xsl" href = "sprites_paged.xslt" ?>
Упомянутый sprites_paged.xslt будет выглядеть так:
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns = "http://www.w3.org/1999/xhtml"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
xmlns:svg = "http://www.w3.org/2000/svg"
xmlns:xlink = "http://www.w3.org/1999/xlink">
<xsl:template match = "/">
<html>
<head>
<meta charset = "UTF-8"></meta>
<style>
svg { display: none; }
/* icon sizes to your liking */
.icon { display: block; width: 1in; height: 1in; }
@media print {
.icon { break-after: page; }
}
</style>
</head>
<body>
<xsl:copy>
<xsl:copy-of select = "//svg:svg"/>
</xsl:copy>
<xsl:for-each select = "//svg:symbol">
<svg class = "icon" xmlns = "http://www.w3.org/2000/svg">
<xsl:attribute name = "viewBox"><xsl:value-of select = "@viewBox"/></xsl:attribute>
<use>
<xsl:attribute name = "xlink:href">#<xsl:value-of select = "@id"/></xsl:attribute>
</use>
</svg>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Я не совсем уверен, что вы считаете быстрым, но если вы хотите автоматическое преобразование из svg во что-то, что может включать латекс, взгляните на пакет
svg.