我有一份学生研究项目的文档,想知道有多少页内容(不包括图片、列表和表格)。我的大学确实区分了内容和图片等,我们应该写出特定数量的内容页。
因此我想停用/禁用/不显示/...任何图形、列表和表格。
这可能吗?
我有一份完成的文档。如果我必须将某些内容应用于每个图表、表格和列表,那么这比复制并删除所有内容要费力得多。但是,如果您有一个无需妥协但从一开始就经过深思熟虑的解决方案,那么请随时分享,即使它对我的问题没有帮助。
答案1
这是一个基于 LuaLaTeX 的解决方案。它定义了一个名为的 Lua 函数,hide_stuff
该函数“吞噬”所有 、 和 环境的内容figure
。table
唯一lstlisting
与输入相关的要求是:(a) 环境的\begin
和\end
语句不得出现在同一个输入行上,(b) 每个输入行只有一个\begin{...}
或\end{...}
语句。
请注意,无需修改或“启动”任何现有的figure
、table
和lstlisting
环境。您需要做的(除了使用 LuaLaTeX 编译文档外)就是将代码块从 复制\usepackage{luacode}
到\AtBeginDocument{...}
LaTeX 文档的序言中。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{listings} % for 'lstlistings' environment
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
in_group = false -- initialize a Boolean variable
function hide_stuff ( buff )
if string.find ( buff, "\\begin{figure}" ) or
string.find ( buff, "\\begin{table}" ) or
string.find ( buff, "\\begin{lstlisting}" ) then
-- start gobbling
buff = buff:gsub ( "\\begin%b{}.-$" , "" )
in_group = true
elseif string.find ( buff, "\\end{figure}" ) or
string.find ( buff, "\\end{table}" ) or
string.find ( buff, "\\end{lstlisting}" ) then
buff = buff:gsub ( "^.-\\end%b{}" , "" )
in_group = false -- end gobbling
elseif in_group == true then
buff = "" -- keep gobbling
end
return buff
end
\end{luacode}
%% Assign the fuction to LuaTeX's "process_input_buffer" callback
\AtBeginDocument{\directlua{luatexbase.add_to_callback (
"process_input_buffer", hide_stuff, "hide_stuff" )}}
\begin{document}
aaa\begin{figure}
\caption{AAA} \end{figure}
bbb
\begin{table} \caption{BBB}
\end{table}ccc
\begin{lstlisting}
CCC
\end{lstlisting}
uuu\begin{figure} % empty "figure" environment
\end{figure}vvv
\end{document}
答案2
您可以使用例如 environ 来收集尸体并将其扔掉:
\documentclass[]{article}
\usepackage{environ,listings}
\RenewEnviron{table}{}
\RenewEnviron{lstlisting}{}
\RenewEnviron{figure}{}
\begin{document}
abllbl
\begin{figure}
figure
\end{figure}
\begin{table}
table
\end{table}
\begin{lstlisting}
abc
\end{lstlisting}
\end{document}
如果您不想丢弃全部内容,您可以重新定义要忽略的命令,例如\renewcommand\includegraphics[2][]{}
。
答案3
这可以通过使用来解决布尔值。
您定义一个布尔变量,该变量表明您是否要包含图形和表格。每个图形和表格语句都必须包含在一个 if 语句中,以测试布尔变量。
最简单的方法是:
\documentclass{article}
\usepackage{graphicx}
\newif\ifplotfig % you can also call it ifplottab or ifplotfigtab
\plotfigtrue % uncomment for 'setting' it to false
\begin{document}
Some text with reference to Fig.~\ref{fig:myLabel}
\begin{figure}[h]
\centering
\ifplotfig
\includegraphics[width=0.65\textwidth]{./SOMEFIGURE.pdf}
\fi
\caption{Test Caption}\label{fig:myLabel}
\end{figure}
Some more text with reference to Table~\ref{tab:myLabel}...
\begin{table}
\caption{Tables Caption}\label{tab:myLabel}
\centering
\ifplotfig
\begin{tabular}{c|c c}
Grid & Some Value & Another Value \\ \hline
CD24 & -1398 & -1191 \\
CD72 & -1926 & -2655
\end{tabular}
\fi
\end{table}
\end{document}
为了减少添加if
子句所花费的时间,您可以搜索和替换
\begin{tabular}
经过\ifplotfig \begin{tabular}
,\end{tabular}
由\end{tabular} \fi
和\includegraphics{...}
经过\ifplotfig \includegraphics{...} \fi
。
对于后一种替换,您需要正则表达式或使用非正则表达式通配符的搜索和替换函数。如果您没有这些经验,您可以替换
\includegraphics
与\ifplotfig \includegraphics
和.pdf}
需要用适合您图形文件的文件结尾来替换.pdf} \fi
。pdf