如果使用 texcount 添加到部分的内容不够,如何警告用户?

如果使用 texcount 添加到部分的内容不够,如何警告用户?

我们愿意适应此解决方案这个包括以下功能:

如果字符数低于限制的 75%(如果参数化则更好),则文本颜色为琥珀色。处理空白部分(如果部分中没有字符,则似乎会中断)

答案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}

相关内容