有没有一种简单的方法可以隐藏所有文本,只保留表格和图形,反之亦然?我的图形和表格用 引用\ref
并嵌入\input
。
答案1
假设您可以使用 LuaLaTeX,以下解决方案可能会让您感兴趣。它设置了两个用户宏,分别称为\HideAllFigsAndTabs
和\ShowOnlyFigsAndTabs
。(希望)不用说,一个文档中最多应该执行两个 LaTeX 宏中的一个。
LaTeX 宏的唯一任务是将其中一个 Lua 函数分配hide_all_figs_and_tabs
给show_only_figs_and_tabs
回调process_input_buffer
。一旦分配给此回调,活动 Lua 函数就会像输入流上的预处理器一样,在 (La)TeX 正常处理开始之前。
输入的唯一限制是,每行只能出现\begin{figure}
、\end{figure}
、\begin{table}
和四个指令中的一个。希望这不会对您的编码习惯造成约束性限制。\end{table}
% !TEX TS-program = lualatex
\RequirePackage{filecontents}
%% create two "dummy" tex files
\begin{filecontents}{myfig.tex}
\begin{figure}[h]
\caption{Hello World}
\end{figure}
\end{filecontents}
\begin{filecontents}{mytab.tex}
\begin{table}[h]
\caption{Goodbye World}
\end{table}
\end{filecontents}
\documentclass{article}
%% Lua-side code
\usepackage{luacode}
\begin{luacode*}
in_fig_or_tab = false
function hide_all_figs_and_tabs ( s )
if s:find ( "\\begin{figure" )
or s:find ( "\\begin{table" ) then
in_fig_or_tab = true
return ""
elseif s:find ( "\\end{figure" )
or s:find ( "\\end{table" ) then
in_fig_or_tab = false
return ""
elseif in_fig_or_tab == true then
return ""
end
return s
end
function show_only_figs_and_tabs ( s )
if s:find ( "\\begin{figure" )
or s:find ( "\\begin{table" ) then
in_fig_or_tab = true
return s
elseif s:find ( "\\end{figure" )
or s:find ( "\\end{table" ) then
in_fig_or_tab = false
return s
-- Must also enable all lines that contain '\input'
-- statements or an '\end{document}' directive:
elseif s:find ( "\\input" )
or s:find ( "\\end{document}" )
or in_fig_or_tab == true then
return s
end
-- If none of the above is true, return empty string:
return ""
end
\end{luacode*}
%% LaTeX-side code
\newcommand\HideAllFigsAndTabs{\directlua{
luatexbase.add_to_callback( "process_input_buffer",
hide_all_figs_and_tabs, "hide_all_figs_and_tabs" )}}
\newcommand\ShowOnlyFigsAndTabs{\directlua{
luatexbase.add_to_callback( "process_input_buffer",
show_only_figs_and_tabs, "show_only_figs_and_tabs" )}}
\usepackage{lipsum} % for filler text
\begin{document}
%% Execute *only one* of the following two instructions:
%\HideAllFigsAndTabs
\ShowOnlyFigsAndTabs
\lipsum[1]
\input myfig
\lipsum[2]
\input mytab
\lipsum[3]
\end{document}