![несовместимость между классом tikzposter и пакетом microtype](https://rvso.com/image/286362/%D0%BD%D0%B5%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%BC%20tikzposter%20%D0%B8%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%BC%20microtype.png)
Я только что начал использовать новый tikzposter
класс (ранее использовал fancytikzposter
пакет того же автора) и сразу обнаружил, что использование microtype
пакета приводит к сбою TeX.
Мне интересно, сталкивался ли кто-нибудь с этим, так как я не знаю, что делать. Мой MWE:
\documentclass{tikzposter}
\usepackage{microtype}
\begin{document}
%\block{\textls{title}}{text}
\end{document}
Закомментированная строка в середине — одна из причин использования microtype
, т. е. для большего контроля над интервалом между буквами. У меня то же самое в pdftex
, xetex
и lualatex
я использую недавно обновленную установку TeXlive.
Ошибка, вызывающая сбой:
! Missing endcsname inserted.
<to be read again>
protect
l.5 \end{document}
?
решение1
Это было довольно сложно... Я бы сказал, что это ошибка в tikzposter
.
Проблема в том, что tikzposter
использует \AtBeginDocument
для запуска tikzpicture
среды, которая затем закрывается \AtEndDocument
. Это означает, что любой другой код, который пакет (в данном случае microtype
) вставляет AtBeginDocument
, выполняется внутри группы, следовательно, любые локальные назначения будут отменены AtEndDocument
. В частности, microtype
отключает некоторые команды, которые разрешены только внутри преамбулы ABD
, что вызывает ошибку AED
.
Советы clsguide
:
Этот
\AtBeginDocument
хук не следует использовать для кода, который выполняет какую-либо верстку, поскольку результат верстки будет непредсказуемым.
Несмотря на то, что tikzposter
проблема заключается не в самом наборе текста, а в группе, которую он открывает, я бы все равно сказал, что это можно квалифицировать как неправильное использование \AtBeginDocument
. tikzposter
Вместо этого можно было бы использовать \AfterEndPreamble
команду from etoolbox
(которую он в любом случае загружает).