计算文本块中的行数

计算文本块中的行数

我想要一个宏来计算文本块中的行数。我能够根据以下问题的答案创建一个宏“计算标题中的换行符“,但我更希望宏直接返回行数,而不是通过检索它\numlines。如果有人知道如何做到这一点,我将非常感激。

\documentclass{article}

\newcommand\countlines[1]{
{\setbox0\vbox{\noindent{#1}\par
\count@\z@
\loop
\unskip\unpenalty\unskip\unpenalty\unskip
\setbox0\lastbox
\ifvoid0
   \xdef\numlines{\the\count@}
\else
   \advance\count@\@ne
\repeat}}
}

\title{aaa\\b\\bb}

\begin{document}

\makeatletter

\countlines{\@title}
\typeout{Number of lines is \numlines}

\end{document}

我特别希望的是 \countlines 直接返回行数,如下所示。

\typeout{Number of lines is \countlines{\@title}}

答案1

您可以在宏中进行计算\title,然后在宏中使用结果\numlines

\documentclass{article}

\newcount\numli \def\numlines{\the\numli}
\let\titleB=\title
\def\title#1{\numli=0 \titleA#1\\\\{#1}}
\def\titleA#1\\{\ifx\\#1\\\expandafter\titleB\else 
   \advance\numli by1 \expandafter\titleA\fi}

\title{aaa\\b\\bb}

\begin{document}

\typeout{Number of lines is \numlines}

\end{document}

答案2

这是我使用高度长度的方法。我认为它可以更好,也许有人可以提出一些改进建议,但对于示例来说有效。我的目的不是改进您的代码,而是向您展示另一种计算文本块中行数的方法。

代码

\documentclass{article}
\usepackage{calc}
\usepackage{pgf}

\newlength{\parline}
\newlength{\paroutindent}
\newlength{\lineheight}
\setlength{\lineheight}{\heightof{abcdefghijklmnoprstuvwxyz}}

\newcommand{\countlines}[1]{%
    \setlength{\paroutindent}{\expandafter\parindent}
    \setlength{\parline}{\heightof{\noindent\begin{minipage}{\linewidth}%
                \setlength{\parindent}{\paroutindent}#1\end{minipage}}}%
    \pgfmathparse{round(\parline / (0.9*\lineheight))}
    #1\par \noindent \texttt{line count: (\pgfmathresult)}
}

\usepackage{lipsum}

\begin{document}
    \countlines{\lipsum[1]}

    \countlines{\lipsum[2]}

    \countlines{Just one line}

    \countlines{Just two \\ lines}

\end{document}

结果

在此处输入图片描述

相关内容