ОБНОВЛЯТЬС тех пор я опубликовал файл стиля LaTeX, основанный на следующих находках: CXLTX Позиция Абсолют, часть (зарождающегося)Коллекция стиля CXLTX, что упрощает точное размещение однострочных текстов на странице.запросы на извлечение: потрясающе!
Я пытаюсь расположить текст с помощью CSS position: absolute
и нашелтекстпоспакет, который в принципе работает отлично. В документации говорится (стр. 4), что «поле, позиционируемое средой, \textblock
плотно прилегает к блоку текста (или другому материалу) внутри него», но когда я пытаюсь
\documentclass[a5paper]{memoir}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setlength{\parskip}{\baselineskip}
\setlength{\parindent}{0pt}
\usepackage[absolute]{textpos}
\setlength{\TPHorizModule}{0.1mm}
\setlength{\TPVertModule}{0.1mm}
\textblockorigin{0mm}{0mm}
% not needed, but makes for easier measuring:
\usepackage[top-left]{pagegrid}
\begin{document}
\TPshowboxestrue
\begin{textblock}{150}[1,0](500,000)\flushright helo\end{textblock}
\begin{textblock}{150}[1,0](500,200)\flushright world\end{textblock}
\begin{textblock}{150}[1,0](500,400)\flushright gX\end{textblock}
\begin{textblock}{150}[1,0](700,400)\flushright .\end{textblock}
\end{document}
\setlength{\parskip}{0pt}
\setlength{\parskip}{-\baselineskip}
то, что я получаю, это
Итак, хотя правые края коробок правильно расположены на отметке 500 (десятые доли мм), а верхние края соответственно на отметках 0, 200 и 400, а нижние края коробок плотно охватывают нижние элементы, как заявлено, высота коробок по-прежнему составляет 8 мм. Как мне сделать так, чтобы они охватывали, как заявлено?
решение1
это было легко... иногда запись вопроса приводит к решению проблемы. для справки:
Я ошибочно предположил, что помещение чего-либо в , textpos
textblock
будет действовать как помещение чего-либо на страницу или в minipage
, т. е. «пропуски» абзацев будут молча опущены.
не так.
во-первых, настройка
\setlength{\parskip}{0pt}
привело к уменьшению высоты ящиков; затем,
\setlength{\parskip}{-\baselineskip}
выдало это:
что является своего рода противоречащим интуиции — я имею в виду,нульпробел между абзацамидолженравно «ноль пробелов над абзацем», не так ли?
ПримечаниеВ реальном мире вам не захочется устанавливать \parskip
глобальное значение, показанное здесь, а вместо этого заставите его отображаться локально, внутри textblock
среды (и, возможно, создать для этого новый макрос).
ОбновлятьВ качестве продолжения я определил удобный макрос, который упрощает абсолютное позиционирование текста. Вот он:
\newdimen\textposstrutheight
\newdimen\textposstrutwidth
\newdimen\textposstrutdepth
\newdimen\textposstrutlength
\textposstrutwidth=0.5mm
\textposstrutheight=2.7mm
\textposstrutdepth=2.8mm
\textposstrutlength=\dimexpr\textposstrutheight+\textposstrutdepth
\newcommand{\textposstrut}{{\color{blue}\vrule height\textposstrutheight width\textposstrutwidth depth\textposstrutdepth}}
\newcommand{\placeflushright}[4]{%
\begin{textblock}{#1}[1,0.5](#2,#3)\flushright{\textposstrut}#4\end{textblock}%
}
теперь, когда ты это сделаешь
\begin{textblock}{150}[1,0.5](500,000)\flushright\textposstrut helo\end{textblock}
\begin{textblock}{150}[1,0.5](500,200)\flushright\textposstrut world\end{textblock}
\begin{textblock}{150}[1,0.5](500,400)\flushright\textposstrut gX\end{textblock}
\begin{textblock}{150}[1,0.5](700,400)\flushright\textposstrut .\end{textblock}
\placeflushright{150}{300}{400}{gX}
(в той же настройке документа, что и в вопросе выше) вы получаете
где значок gX
в левом нижнем углу показывает, что текст действительно расположен правильно (базовая линия правого края X
измеряется ( 30mm, 40mm )
от края документа).
Обратите внимание, что распорка, определенная здесь, имеет видимую ширину для наглядности; кроме того, ее высота и глубина были тщательно подобраны так, чтобы соответствовать конкретным размерам шрифта, используемого здесь — при переключении на другой шрифт есть вероятность, что и \textposstrutheight
- depth
придется определять заново.