
Я использую пакет multicol
для набора заголовка в одну колонку (охватывающего всю ширину текста) и основного текстового блока в две колонки. Для этого я начинаю среду multicols вместе с началом текстового блока. Заголовок в одну колонку занимает небольшую часть высоты текста на первой странице, и мне нужно установить там сноску, прежде чем начинать среду в две колонки. Я хотел бы, чтобы эта сноска была набрана под первой колонкой в двухколоночном тексте. Как я могу это сделать?
Более того, я хотел бы, чтобы сноски были набраны в одну колонку под одной из колонок текста — я даже не против, чтобы они были в виде сносок в две колонки, но я не хочу, чтобы сноски охватывали всю ширину текста. Я пробовал с командой \twocolumnfootnotes
из класса memoir
, с пакетами ledmac
, dblfnote
и даже с ftnright
(последний жалуется на то, что он используется в документе с одной колонкой из-за этого заголовка с одной колонкой). Ни один из них не оказался полезным в этой настройке. Как менее чем MWE, просто чтобы передать более конкретное изображение моего сценария, давайте рассмотрим:
\documentclass{memoir}
\usepackage{multicol}
\begin{document}
A single-column heading\footnote{Here I have my footnote.}
\begin{multicols}{2}
Here I am in the two-column environment, and I want my footnotes being set in accordance with the document's ``columnwidth''.\footnote{A footnote in the two-column environment.}
\end{multicols}
\end{document}
решение1
Есть ряд веских причин, по которым невозможно предоставить макет, который вы ищете multicols
. Две важные из них:
Как следует из названия, код должен поддерживать разные номера столбцов на одной странице. Теперь, какой ширины должна быть сноска? Ширина полного текста уродлива, но такова и любая другая ширина, если она не вписывается в остальную настройку столбцов. Даже если спецификация будет сокращена до "одна и две колонки с балансировкой", она все равно будет уродливой, если у вас, скажем, одна сноска (шириной в две колонки), но нижняя часть вашей страницы окажется одноколоночной.
Технически,
multicols
работает, собирая материал на страницу и затем разделяя столбцы (и в случае балансировки в конце потенциально перебирая много (сотни) сценариев, чтобы найти лучшее решение балансировки). Теперь это работает, используя\vsplit
и\vsplit
сохраняя материал сносок внутри блоков. Таким образом, используя этот подход, вы не можете использовать материал сносок как часть самого столбца (или принимать участие в балансировке). Теперь, конечно, можно использовать другой подход, включающий набор выходных процедур, которые выполняют всю эту работу в главном вертикальном списке, а не безопасно с уже собранным материалом в блоках. Однако это было бы хорошим фактором сложнее, и в результате действительно сложные выходные процедуры обычно ограничивают себя решением ограниченных проблем.
Теперь TeX является Turing complete, как вы упомянули в комментарии, но это не поможет вам на начальном этапе. Это не означает, что возможно программировать все и вся в TeX, и даже если это возможно, вы можете в конечном итоге отказаться от всех или большинства функций, которые TeX предлагает в одной области, и перепрограммировать его довольно неэффективным образом самостоятельно, просто чтобы обойти встроенные ограничения. До недавнего времени самым большим препятствием было то, что это также означало бы, что обработка в конечном итоге будет невероятно медленной или достигнет пределов памяти.
Эта ситуация значительно улучшилась за последние годы, и это одна из причин, по которой теперь возможно придумать программную среду (например, expl3
), которая обеспечивает эту основу для расширения возможностей TeX в TeX. Когда multicols
изначально было написано, было невозможно представить, что кто-то реализует полноценный парсер регулярных выражений в TeX (не технически, но реалистично), теперь у нас есть один в expl3
.
По сути, TeX был разработан для документов с одной колонкой, и все, что выходило за ее рамки, было либо невозможно, либо возможно только в ограниченных сценариях.
В наши дни можно было бы сделать лучше, и у нас есть другая концепция дизайна страницы в ящике, которая предлагает то, что вы ищете. Загвоздка в том, что она не готова. Ее прототип уже из 2000 года, но тогда это было еще утопией из-за ограничений скорости, которые она накладывала.
Это изменилось, так что теперь что-то вроде expl3
платформы, которая может (и используется) по-настоящему, и мы в настоящее время находимся в процессе пересмотра кода и идей конца прошлого века. Теперь это звучит ужасно старо, не так ли? Но факт в том, что для текущего LaTeX multicol
все еще существует как "решение", так что ... есть некоторая причина для этого.