我有一个简单的问题:如何创建具有另一个字符串的长度(或所有尺寸)的文本?我的意思是:
用 latex 写文本,但让它打印为具有以下尺寸长文。
提前致谢。
编辑:在我这边措辞不当之后,我应该澄清一下我的意思:
This gives text normally.
This gives text normally.
This gives longertext normally.
我希望第二行能用乳胶而不是手工的方式得到正确的间距。
答案1
是的,您可以使用graphics
或graphicx
包来做到这一点。
\newlength{\longword}
\settowidth{\longword}{\textbf{LONGERTEXT}}
\resizebox{\longword}{!}{\textbf{TEXT}}
所以我在这里所做的就是设置一个新的长度\longword
,然后我可以给它一个值。这是我在这里所做的:
\settowidth{\longword}{\textbf{LONGERTEXT}}
这将第二个参数(此处 )的宽度分配\textbf{LONGERTEXT}
给第一个参数(此处\longword
)中给出的长度命令。所以我将 的宽度分配给\textbf{LONGERTEXT}
了我的 length 的长度\longword
。
现在,包\resizebox
提供的命令graphics
允许我将第三个也是最后一个参数中的文本缩放到第一个和第二个参数中指定的宽度和高度。所以你可以看到,我所做的就是将的宽度缩放为的长度\textbf{TEXT}
。\longword
当然,我刚刚将的长度设置\longword
为的宽度\textbf{LONGERTEXT}
。因此,我将的宽度缩放\textbf{TEXT}
为的宽度\textbf{LONGERTEXT}
。当然,我可以\longword
根据需要更改的宽度,这是定义变量的优点之一。
任!
一参数都\resizebox
保持文本的纵横比。
因此:
\documentclass[12pt]{article}
\pagestyle{plain}
\usepackage[margin=1.8cm]{geometry}
\geometry{a4paper}
\usepackage[parfill]{parskip}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\begin{document}
\newlength{\longword}
\settowidth{\longword}{\textbf{LONGERTEXT}}
\resizebox{\longword}{!}{\textbf{TEXT}} \\
\textbf{LONGERTEXT} \\
\textbf{TEXT}
\end{document}
给予
总的来说,我会真的建议保留纵横比。但是,如果您想保持高度不变,可以使用以下命令\totalheight
作为命令的第二个参数\resizebox
:
\resizebox{\longword}{\totalheight}{\textbf{TEXT}}
这不太好。
为编辑添加:
嗯,这样就更容易了,只需使用\makebox
\newlength{\longword}
\settowidth{\longword}{longertext}
This gives text normally. \\
This gives \makebox[\longword][l]{text} normally. \\
This gives longertext normally.
第一个可选参数\makebox
设置宽度,第二个(此处l
)设置对齐方式,l
将框的内容向左移动(默认内容居中)。
我原本打算提供一些有趣的附加代码,以提供更通用的解决方案,但 A. Ellett 抢先了一步,他值得一试。但我想我还是补充一下我所做的,以便给出一些解释:
我们可以定义一个命令,允许我们将一个单词占用的空间设置为另一个单词的宽度,如下所示:
\newlength{\firstword}
\newcommand{\stretchy}[2]{%
\settowidth{\firstword}{#1}%
\makebox[\firstword][l]{#2}%
}
所以我在这里所做的就是定义具有两个参数的命令\stretchy
。长度\firstword
由第一个参数的宽度给定:
\settowidth{\firstword}{#1}%
然后创建一个具有第一个单词宽度的框,并以第二个单词作为其内容:
\makebox[\firstword][l]{#2}%
LaTeX 将框视为具有预定宽度的一个大字母,这意味着它只留下与框宽度相同的空间。这意味着,如果您将框的宽度设置为短于其内容的宽度,则内容将溢出。因此:
\newlength{\firstword}
\newcommand{\stretchy}[2]{%
\settowidth{\firstword}{#1}%
\makebox[\firstword][l]{#2}%
}
This gives text normally. \\
This gives \stretchy{longertext}{text} normally. \\
This gives longertext normally.
This gives a long gap -- see? \\
This gives \stretchy{Floccinaucinihilipilification}{a long gap} --
see? \\
This gives Floccinaucinihilipilification -- see?
This gives Floccinaucinihilipilification -- see? \\
This gives \stretchy{not enough gap}{Floccinaucinihilipilification} --
see? \\
This gives not enough gap -- see?
答案2
也许这更符合您的要求:
\documentclass{article}
\newlength\aetmplength
\newcommand\matchlength[3][c]{%%
\settowidth\aetmplength{#3}%%
\makebox[\aetmplength][#1]{#2}}
\setlength{\parindent}{0pt}
\pagestyle{empty}
\begin{document}
This gives text normally. \newline
This gives \matchlength{text}{longertext} normally. \newline
This gives longertext normally.
\vspace{0.5in}
This gives text normally. \newline
This gives \matchlength[l]{text}{longertext} normally. \newline
This gives longertext normally.
\vspace{0.5in}
This gives text normally. \newline
This gives \matchlength[r]{text}{longertext} normally. \newline
This gives longertext normally.
\end{document}
控制序列\matchlength
有三个参数。第一个是可选的,允许您选择文本在设置的空间中的显示方式。第二个参数是字符串本身。第三个参数是确定要使用的空间的文本。
答案3
非常简单calc
:
\documentclass{article}
\usepackage{calc}
\newcommand\matchlength[3][c]{\makebox[\widthof{#3}][#1]{#2}}
\begin{document}
This gives text normally.
This gives \matchlength{text}{longertext} normally.
This gives longertext normally.
\bigskip
This gives text normally.
This gives \matchlength[l]{text}{longertext} normally.
This gives longertext normally.
\bigskip
This gives text normally.
This gives \matchlength[r]{text}{longertext} normally.
This gives longertext normally.
\end{document}