我希望通过在 Microsoft Word 中按下此按钮即可轻松实现某些目标:
这样我就可以做出这样的事情:
我目前所看到的在这个论坛上要么在页面上分布单词而不是字母,要么使用包sodef
中的静态定义字母之间的间距soul
来模拟这种效果,而不是真正地拉伸文本以到达两端。
我想知道 LaTeX 中是否有一个命令可以实现 Word 中该按钮的功能。
答案1
用 替换空格{}
(这样就会出现双空格),并在每个字母后面放置一个空格。
警告带重音的字母不起作用。除非您使用 XeLaTeX 或 LuaLaTeX,否则需要做更多工作。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\widen}{mm}
{
\tl_set:Nx \l_tmpa_tl { #2 }
\tl_replace_all:Nnn \l_tmpa_tl { ~ } { {} }
\noindent
\makebox[\textwidth][s]
{
\skip_set:Nn \spaceskip { 0pt plus 1fill }
#1 \tl_map_inline:Nn \l_tmpa_tl { ##1 ~ } \unskip
}
}
\ExplSyntaxOff
\newcommand{\mytext}{SOMETHING BIG}
\begin{document}
\widen{\huge}{SOMETHING BIG}
\bigskip
\widen{\large}{\mytext}
\end{document}
最后说明: 有些东西用文字处理器来处理很容易,而用 TeX 来处理却很难,这通常清楚表明,从印刷工的角度来看,这是相当可疑的东西。
答案2
以下是使用 LaTeX\makebox
进行s
拉伸对齐的一个选项:
\documentclass{article}
\usepackage[paper=a6paper]{geometry}% Just for this example
\setlength{\parindent}{0pt}% Just for this example
\begin{document}
\sffamily
\makebox[\linewidth][s]{\LARGE\bfseries S O M E T H I N G {} B I G}
\makebox[\linewidth][s]{s o m e t h i n g {} s m a l l}
\bigskip
\newlength{\somethingbig}
\settowidth{\somethingbig}{\LARGE\bfseries SOMETHING BIG}
{\LARGE\bfseries SOMETHING BIG}
\makebox[\somethingbig][s]{s o m e t h i n g {} s m a l l}
\end{document}
答案3
以下是使用 directlua 的 lualatex 的完整解决方案:
\documentclass[]{article}
\usepackage{fontspec}
\setromanfont{Rockwell Extra Bold}
\newcommand\distributed[1]{%
\makebox[\linewidth][s]{%
\directlua{
letters = {}
for letter in string.gmatch("#1", ".") do
if letter == " " then
table.insert(letters, "{}")
else
table.insert(letters, letter)
end
end
tex.sprint(table.concat(letters, " "))
}%
}%
}
\begin{document}
\noindent{\Huge\bfseries\distributed{Hello World}}
\distributed{Some more text}
\end{document}
结果如下:
答案4
调整我的答案如何重复字符串中的所有字符?\hfill
。我不得不修改它,以便不在第一个字符之前添加。
正如沃纳指出的那样,这种方法通常不能接受宏作为其论证的一部分。
\documentclass{article}
\usepackage{lipsum}
\newcommand\chariterate[1]{\chariteratehelpX#1 \relax\relax}
\def\chariteratehelpX#1#2\relax\relax{#1\chariteratehelpA#2\relax\relax}
\def\chariteratehelpA#1 #2\relax{%
\chariteratehelpB#1\relax\relax%
\ifx\relax#2\else\hfill\chariteratehelpA#2\relax\fi
}
\def\chariteratehelpB#1#2\relax{%
\charop{#1}%
\ifx\relax#2\else
\chariteratehelpB#2\relax%
\fi
}
\def\charop#1{\hfill#1}
\begin{document}
\sffamily
\noindent{\Huge\chariterate{SOMETHING BIG}}
\noindent{\scriptsize\chariterate{something small}}
\lipsum[1]
\end{document}