我想在 TeX 中创建一个元素,将其定义为具有固定宽度的水平框,并包含几行(我的情况是三行)。每行应根据其大小自动与水平框大小对齐 - 我不想根据字体大小进行对齐,因为这样长度就不完全相同了。
不用说,这些台词的字数是不同的。
Same
Word length
Even though lines are different
在这种情况下,第一行字体应该很大,第二行字体稍小一些,第三行字体最小。
我想使用 XeTeX 及其连接功能来给字体增添一些趣味。
非常感谢您的帮助(提前)
答案1
以下是 Aditya 所做工作的 LaTeX 版本:
\documentclass[12pt]{article}
\usepackage{calc,fontspec,graphicx}
\setmainfont[Ligatures=Rare]{Didot LT Pro}
\begin{document}
\centering
% scale to 3 inches
\resizebox{3in}{!}{Same}\\[.75em]% adjust vertical spacing to taste
\resizebox{3in}{!}{Word length}\\[.5em]
\resizebox{3in}{!}{Even though lines are different}\\
\vspace{5ex}
% scale to length of second line
\Huge
\resizebox{\widthof{Word length}}{!}{Same}\\
Word length\\[-.25em]
\resizebox{\widthof{Word length}}{!}{Even though lines are different}
\end{document}
我没有能力实现自动化,而且我怀疑是否应该尝试:为了获得最佳效果,需要手动调整垂直间距和宽度,同时考虑字形的形状和所需的效果。例如,在我看来,如果我将第一行的宽度缩放到 3.12 英寸,它的宽度看起来会更像其他行。并且可能需要在一行或\hspace
另一行的开头添加或减去一些,因为准确居中的位置在眼睛看来可能看起来偏离中心,这同样取决于字形的形状。
这种方法需要时间,但如果一段文本值得以这种风格设置,那么值得付出努力进行手动调整。
答案2
您可以将每条线缩放到适当的长度。例如,在 ConTeXt 中,我将使用:
\starttext
\startframedtext
[frame=off,width=8cm]
\setupscale[width=\hsize]
\scale{Same}\\
\scale{Word length}\\
\scale{Even though lines are different}
\stopframedtext
\stoptext
这使
我确信 LaTeX 中存在类似的缩放宏。
还可以定义一个环境,让每行自动缩放到适当的宽度。如果您需要,我可以提供代码。
答案3
Thérèse 答案的自动版本
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\sdoky}{O{c}mm}
{% #1 = vertical alignment, #2 = desired size, #3 = items to stack
\parbox[#1]{#2}
{
\vspace{0pt} % set the very top as reference point in 't' case
\setlength{\lineskiplimit}{\maxdimen} % all lines are too near
\setlength{\lineskip}{3pt} % add 3pt between lines
\sdoky_equalize:n { #3 }
}
}
\seq_new:N \l__sdoky_equalize_seq
\box_new:N \l__sdoky_equalize_box
\cs_new_protected:Nn \sdoky_equalize:n
{
\seq_set_split:Nnn \l__sdoky_equalize_seq { \\ } { #1 }
\seq_map_inline:Nn \l__sdoky_equalize_seq
{
\sdoky_equalize_space:w ##1 \q_stop
}
}
\NewDocumentCommand{\sdoky_equalize_space:w}{o}
{
\IfValueT{#1}{\vspace{#1}}
\__sdoky_equalize_line:w
}
\cs_new_protected:Npn \__sdoky_equalize_line:w #1 \q_stop
{
\hbox_set:Nn \l__sdoky_equalize_box { \tl_trim_spaces:n { #1 } }
\box_resize_to_wd:Nn \l__sdoky_equalize_box { \linewidth}
\box_use_drop:N \l__sdoky_equalize_box
}
\ExplSyntaxOff
\begin{document}
\sdoky{4cm}{
Same \\
Word length \\
Even though lines are different
}
\sdoky{6cm}{
Same \\
Word length \\
Even though lines are different
}
\bigskip
\sdoky[t]{4cm}{
Same \\
Word length \\
Even though lines are different
}
\sdoky[t]{6cm}{
Same \\
Word length \\
Even though lines are different
}
\bigskip
\sdoky[b]{4cm}{
Same \\[2ex]
Word length \\[4ex]
Even though lines are different
}
\sdoky[b]{6cm}{
Same \\[2ex]
Word length \\[4ex]
Even though lines are different
}
\end{document}