计算特定行宽的长标题的行数

计算特定行宽的长标题的行数

我正在研究一种效果,可以自动将任意长的标题调整为具有特定行宽的多行。标题没有明确的换行符,只是一个常规字符串。目前,我有以下代码来计算行数:

\newcounter{numbertitlelines}
% Define a macro to calculate the number of title lines
% #1: The length of title line (set by paper)
% #2: The text of title (set by user)
\newlength{\titlelength}
\def\cuz@macro@numbertitlelines#1#2{
    \settowidth{\titlelength}{#2}
    \setcounter{numbertitlelines}{0}
    \loop{
        \stepcounter{numbertitlelines}
    }\ifdim\titlelength>\value{numbertitlelines}#1\repeat
}

但有时它对英语效果不太好,因为大多数情况下不同行上的文本长度不同(而中文标题由于文本宽度相同而效果很好):

在此处输入图片描述

上图中,中文、英文标题下划线的个数均由 count 决定numbertitlelines

有没有方法可以检查每行文本的宽度,或者也许有一些不同的想法来解决这个问题?

顺便说一句:它应该与pdflatexxelatex和 一起工作lualatex

答案1

lineno正如您所说,您想这样做是为了添加下划线,让我指出两种无需亲自计算行数即可做到这一点的方法。首先,您可以使用该包的“意外用途”之一。

示例输出

\documentclass{article}

\usepackage{lineno}

\begin{document}

\begin{minipage}{5cm}
  \centering\internallinenumbers
  \renewcommand{\makeLineNumber}{\rule[-2pt]{\textwidth}{0.4pt}\hss}%
  A VERY COMMON \LaTeX\ THESIS TEMPLATE OF COMMUNICATION UNIVERSITY OF
  ZHEJIANG
\end{minipage}

\end{document}

其次,如果您不希望线条跨越框的宽度,而只是给定的文本,那么您可以使用该ulem包:

第二个示例

\documentclass{article}

\usepackage{ulem}

\begin{document}

\begin{minipage}{5cm}
  \centering
  \uline{A VERY COMMON \LaTeX\ THESIS TEMPLATE OF COMMUNICATION UNIVERSITY OF
  ZHEJIANG}
\end{minipage}

\end{document}

答案2

为了计算行数,\prevgraf可以使用内部 TeX 计数器,它包含当前形成或刚刚关闭的段落的行数(参见TeXbook,第 14 章)。因此,此代码:

\documentclass{article}
\newcounter{numbertitlelines}
\newlength{\titlelength}
\newbox\titlebox % auxiliary box
\newcount\titlelines % auxiliary counter
\newcommand{\titleformat}{\bfseries\centering} % format of title output
\newcommand*{\titlelinescount}[2]{%
    \setbox\titlebox=\vbox{\hsize=#1 \titleformat
        #2\par
        \global\titlelines=\the\prevgraf
    }
    \setcounter{numbertitlelines}{\the\titlelines}
}
\begin{document}

% -- Test --
\newcommand{\Title}{ A VARY COMMON \LaTeX\ THESIS TEMPLATE OF COMMUNICATION UNIVERSITY OF ZHEJIANG}
\newlength{\parlength}
\setlength{\parlength}{0.35\textwidth}

\titlelinescount{\parlength}{\Title}

The title \parbox{\parlength}{\titleformat\Title} contains \thenumbertitlelines\ lines


\end{document}

得出这样的结果:

在此处输入图片描述

\titleformat包含标题输出的设置,提供与计数命令中的标题格式的对应关系。我设置了\bfseries\centering示例。

辅助 TeX 计数器\titlelines用于全局保存\prevgraf中的值\vbox。当然,如果你愿意,你可以直接使用这个计数器,而不需要 numbertitlelines计数器。

相关内容