隐藏表格和图形并保留文本,反之亦然?

隐藏表格和图形并保留文本,反之亦然?

有没有一种简单的方法可以隐藏所有文本,只保留表格和图形,反之亦然?我的图形和表格用 引用\ref并嵌入\input

答案1

假设您可以使用 LuaLaTeX,以下解决方案可能会让您感兴趣。它设置了两个用户宏,分别称为\HideAllFigsAndTabs\ShowOnlyFigsAndTabs。(希望)不用说,一个文档中最多应该执行两个 LaTeX 宏中的一个。

LaTeX 宏的唯一任务是将其中一个 Lua 函数分配hide_all_figs_and_tabsshow_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}

相关内容