在收到一些评论后,我将修改这个问题,以便它更容易理解。
这是我的 MWE:
\documentclass[12pt, twocolumn, a4paper]{article}
\begin{document}
\section*{This is a very long title, that goes over several lines and I would like to have the characters squeezed, so that it fits in one single line}
\end{document}
本节标题将跨越几行,因为我使用双栏文档中有两列,因此少于一半部分标题的 A4 纸宽度。当然,这个例子是极端我没有这样的我的文档中有很长的标题。我的标题确实只超出行一个字左右。
现在,我正在寻找代码,自动地测量章节标题的长度,然后调整它(挤压它!),以便整个标题最终适合一行。
有人知道怎么做吗?人物应被挤压,如压缩字体,不是这空格在文本中减少。
我希望有人有解决方案,感谢大家的努力!另外,我希望问题现在已经清楚了。
答案1
以下是一些似乎可以满足的条件:
您仅使用
\section*
。通常,章节标题比列宽短,但偶尔会滚动到两行。
翻滚应该总是适合一行。
(1)有助于简化测量(标题中没有截面编号)。我们可以使用xparse
如果您不想更改代码,请重新定义\section
并管理聚会。*
对于(3)我们可以使用graphicx
调整\resizebox{<width>}{<height>}{<stuff>}
内容大小以适应\linewidth
。
\documentclass[twocolumn]{article}
\usepackage{xparse,graphicx}
\let\oldsection\section
\makeatletter
\RenewDocumentCommand{\section}{s o m}{%
\sbox\z@{\normalfont\Large\bfseries #3}%
\ifdim\wd\z@>\linewidth
\oldsection*{\resizebox{\linewidth}{\ht\z@}{\usebox\z@}}
\else
\oldsection*{#3}
\fi
}
\makeatother
\begin{document}
\section*{A short title}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
\section*{This is a very long title, that goes over several lines and I would like to have the characters squeezed, so that it fits in one single line}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
\section*{This is a very long title spanning two lines}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
\section*{XyzXXXXXXXXXXXXXXXX}
\section*{XyzXXXXXXXXXXXXXXXXXX}
\section*{XyzXXXXXXXXXXXXXXXXXXXX}
\section*{XyzXXXXXXXXXXXXXXXXXXXXX}
\section*{XyzXXXXXXXXXXXXXXXXXXXXXXX}
\section*{XyzXXXXXXXXXXXXXXXXXXXXXXXXX}
\end{document}
我们将\section
标题存储在一个框中,并将该框的第w
i个与 进行比较。如果它更宽,我们将其水平缩小到,否则我们就按原样设置标题。d
\linewidth
\linewidth
答案2
我找到了以下解决方案:
\usepackage[tracking=true]{microtype}
\newcommand\squeeze[1]{\SetTracking{encoding=*}{#1}\lsstyle}
我可以这样调用它:
\section*{\squeeze{-75} *This is a very long title that is now being squeezed into one line*}
尽管如此,我必须说“挤”!并且每次都说挤多少(“-75”)。
有人知道一种方法吗,即文本自动地挤进一线?
谢谢大家!
奥洛夫
答案3
第一个评论是,缩小标题超出 LaTeX 的默认设置可能会难以阅读或看起来不合适,因此重命名该部分可能是更好的选择。
话虽如此,如果一行内容放不下, 最好有一个打印\sectionshort[Short Title]{Full Title}
命令。我们甚至可以选择压缩完整标题,而不是诉诸短标题。<Short Title>
<Full Title>
https://tex.stackexchange.com/a/19414很好地解释了如何管理单词之间的间距,为了实现挤压,我刚刚减少了单词之间的正常间距——可能有其他更好的方法来做到这一点。
\newlength{\reducedsectionspacing}
\setlength{\reducedsectionspacing}{0.333pt} %This changes the natural spacing between words
\newlength{\defaultsectionspacing}
\setlength{\defaultsectionspacing}{\fontdimen2\font}
\newlength{\sectiontitlelength}
\newcommand{\shortsection}[2][]{
\section{\setlength{\sectiontitlelength}{\widthof{\thesection\quad}+\widthof{#2}}\ifdim\sectiontitlelength<\linewidth#2
\else
\fontdimen2\font=\reducedsectionspacing
\setlength{\sectiontitlelength}{\widthof{\thesection\quad}+\widthof{#2}}\ifdim\sectiontitlelength<\linewidth#2
\else\fontdimen2\font=\defaultsectionspacing
\ifx\\#1\\#2\else#1
\fi\fi\fi
}}
首先,我们测试给定的标题是否比行中可用的空间长,然后我们将 LaTeX 的默认字间距减少到\reducedsectionspacing
,看看是否足以将其放在一行中。如果这还不够好,那么我们会放置短标题(如果有),否则放置完整标题。
使用以下内容进行测试
\shortsection[This title is short]{This title is far far far far too long to be practical}
\shortsection[This title is short]{This title is far far far too long to be practical thus it gets ignored and replaced by the short version}
\shortsection[This title is short]{This isn't too long}
\setcounter{section}{0}
\shortsection{This title is far far far far too long to be practical}
\shortsection{This title is far far far too long to be practical thus it gets ignored and replaced by the short version}
\shortsection{This isn't too long}
我们发现,在可行的情况下,标题被压缩在一起,并用短标题代替。