答案1
你可以尝试这个基于 LuaTeX 和 的解决方案scrartcl
。目前主要缺点是:
- 无法计算宏中的单词
- 不支持大于部分
- 不支持未编号标题(
\section*
等)
\documentclass{scrartcl}
\usepackage{expl3}
\usepackage{luacode}
\usepackage{blindtext}
\usepackage{xcolor}
\begin{luacode*}
-- call texcount to count myself!
local handle = io.popen(string.format("texcount -tex -merge -sum %s.tex", tex.jobname))
texcount_lines = {}
while true do
local line = handle:read("*l")
if line == nil then
break
else
table.insert(texcount_lines, line)
end
end
handle:close()
function is_letter(s)
return s:byte() >= 97 and s:byte() <= 122
end
local cur_section_count = 0
section_words = {}
-- find info line
local info_line_number = nil
for i=1,#texcount_lines do
local line = string.lower(texcount_lines[i])
local a, b = line:find("%d++%d++%d")
if a ~= nil then
local match = line:sub(a, b)
local num_table = {}
match:gsub("%d+", function(s) table.insert(num_table, s) end)
local colon_pos = line:find(":")
assert(colon_pos ~= nil)
local header_start = colon_pos - 1
while is_letter(line:sub(header_start, header_start)) do
header_start = header_start - 1
end
local header = line:sub(header_start + 1, colon_pos - 1)
if header == "section" then
table.insert(section_words, cur_section_count)
cur_section_count = tonumber(num_table[1])
else
cur_section_count = cur_section_count + tonumber(num_table[1])
end
end
end
if cur_section_count > 0 then
table.insert(section_words, cur_section_count)
end
-- remove first 0
table.remove(section_words, 1)
function get_section_words(section_ind)
local ret = section_words[section_ind]
if ret == nil then
tex.print("0")
end
tex.print(tostring(ret))
end
\end{luacode*}
\makeatletter
\ExplSyntaxOn
\int_new:N \g_doc_section_counter
\int_gset:Nn \g_doc_section_counter {0}
\tl_new:N \l_doc_tmpa_tl
\int_new:N \l_doc_tmpa_int
\tl_new:N \g_doc_disposition_font_tl
\tl_gset:NV \g_doc_disposition_font_tl \sectfont
\AddtoDoHook{heading/preinit/section}{
\int_gincr:N \g_doc_section_counter
\tl_set:Nx \l_doc_tmpa_tl {
\directlua{
get_section_words(\int_use:N \g_doc_section_counter)
}
}
\int_set:Nn \l_doc_tmpa_int {\l_doc_tmpa_tl}
\setkomafont{disposition}{\g_doc_disposition_font_tl}
% the comparision is done here
% word limit is set to 250
\int_compare:nNnTF {\l_doc_tmpa_int} < {250} {
\color{red}
\addtokomafont{disposition}{\color{red}}
}{
\color{black}
}
}
\ExplSyntaxOff
\makeatother
\begin{document}
\section{Some section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\subsection{A subsection}
Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper. semper
\subsubsection{A subsubsection}
Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper. semper
Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper. semper
\subsection{A subsection}
Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper. semper
\section{Another section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\section{Another section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\section{Test section}
\section{Test section}
This section does not contain enough words.
\section{Test section}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam lobortis facilisis
sem. Nullam nec mi et neque pharetra sollicitudin. Praesent imperdiet mi nec
ante. Donec ullamcorper, felis non sodales commodo, lectus velit ultrices augue,
a dignissim nibh lectus placerat pede. Vivamus nunc nunc, molestie ut, ultricies
vel, semper in, velit. Ut porttitor. Praesent in sapien. Lorem ipsum dolor sit
amet, consectetuer adipiscing elit. Duis fringilla tristique neque. Sed interdum
libero ut metus. Pellentesque placerat. Nam rutrum augue a leo. Morbi sed elit
sit amet ante lobortis sollicitudin. Praesent blandit blandit mauris. Praesent
lectus tellus, aliquet aliquam, luctus a, egestas a, turpis. Mauris lacinia lorem
sit amet ipsum. Nunc quis urna dictum turpis accumsan semper.
\end{document}