Переменная высота шрифта через таблицы в LaTeX - PullRequest
2 голосов
/ 16 апреля 2010

Я искал более элегантное решение следующей проблемы с набором текста. Рассмотрите те баннеры, найденные в печатных СМИ, где текст выровнен как:

B    I    G        T   E   X   T
small text small text small text
m o r e    m e d i u m   t e x t

Размеры шрифта настраиваются таким образом, чтобы высота уменьшалась для более длинных строк текста, чтобы каждая строка имела равную ширину. Я написал небольшой скрипт, который запускает каждую строку отдельно, компилирует, обрезает полученный PDF, а затем \includegraphics каждый в таблице. Это дает желаемый эффект, но требует как внешнего сценария, так и pdfcrop (который обрезает только белую ограничивающую рамку). Поскольку большая часть LaTeX осознает себя, я полагаю, что было бы возможно, чтобы он распознавал ширину рамки и масштабировал ее соответствующим образом, чтобы любой текст вписывался точно в желаемую ширину.

Какие-нибудь мысли или идеи о том, как может работать чистая реализация LaTeX?

РЕДАКТИРОВАТЬ В качестве дополнения к предлагаемому решению AVB (поскольку большой код в комментариях выглядит ужасно), я разместил ниже используемый код, чтобы другие могли его легко найти.

\documentclass[]{article}
\usepackage[pdftex]{graphicx}
\begin{document}
\begin{table}[l]
\resizebox{10cm}{!}{BIG Text} \\
\resizebox{10cm}{!}{small text small text small text} \\ 
\resizebox{10cm}{!}{Medium Text Medium Text}
\end{table} \end{document} 

Ответы [ 3 ]

3 голосов
/ 16 апреля 2010

Во-первых, прочитайте раздел часто задаваемых вопросов TeX под названием Изменение пробела между буквами . В зависимости от ваших обстоятельств, пакеты и рекомендации в этом FAQ могут быть достаточными.

Также обратите внимание на команды \scalebox и \resizebox в пакете graphicx. Они делают то, что подразумевают названия.

2 голосов
/ 16 апреля 2010

Я уверен, что это можно улучшить, и из-за разных реализаций шрифтов разных размеров это не будет точным, но вот простой и быстрый способ сделать это:

\documentclass[10pt]{article}

\usepackage{pgfmath}
\usepackage{anyfontsize}


\newlength{\mywidth}
\newlength{\testwidth}
\setlength{\mywidth}{4in}
\newcommand{\fixedwidth}[1]{%
\settowidth{\testwidth}{#1}%
\pgfmathsetmacro{\x}{round(\mywidth/\testwidth * 10)}%
\pgfmathsetmacro{\y}{round(\mywidth/\testwidth * 15)}%
\bgroup\fontsize{\x pt}{\y pt}\selectfont#1\egroup}

\begin{document}

\fixedwidth{hello world}

\fixedwidth{greetings earthlings}
\end{document}

На практике это немного меньше, чем 4in, но две строки текста масштабируются до одинакового количества.

1 голос
/ 16 апреля 2010

Проверьте пакет textfit . Использование:

\scaletowidth{width}{text}

или

\scaletoheight{height}{text}
...