2010-04-15 2 views
1

Я искал более элегантное решение следующей проблемы набора. Рассмотрим эти баннеры, найденные в печатных средствах массовой информации, где текст выравнивается как:Переменная высота шрифта через таблицы в LaTeX

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?

EDIT В качестве дополнения к предлагаемому решению 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} 

ответ

2

Прежде всего, прочтите следующее: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=letterspace. В зависимости от ваших обстоятельств, пакеты и рекомендации в этом FAQ могут быть достаточными.

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

2

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

\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} 

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

+0

Интересное решение Andrew - это, кажется, что на практике, используя раунд не получить их в линию _exactly_, но вместо того, чтобы очень близко. – Hooked

+0

Да, я не был уверен, могут ли шрифты быть нецелыми. Я думаю, что они могут, поэтому «круглый» может быть лишним. Во всяком случае, у вас есть лучший ответ, так что это не важно. –

1

Отъезд упаковки textfit. Использование:

\scaletowidth{width}{text} 

или

\scaletoheight{height}{text} 
+0

Ваш пример: http://i56.photobucket.com/albums/g162/nakedwithbootson/temp.png – Geoff

+0

Из трех опубликованных в настоящее время трех примеров (Джефф, Стейси, AVB) это делает худшее при выравнивании столбца справа в точку. Хотя это выглядит красиво для большего блока текста, для коротких заголовков я ищу его немного, чтобы зазубриться справа. (+1) Для представления меня в пакет - это кажется полезным в своем отношении! – Hooked

 Смежные вопросы

  • Нет связанных вопросов^_^