条件表达式将图形转换为表格。可以吗?

条件表达式将图形转换为表格。可以吗?

我有一个想法给你:
我在 MultiMarkdown 中写作,我的所有图表通常都是图片。这让我可以写出这样的内容:

MultiMarkdown 输入

![This is the caption.][table1]

[table_sometable]: tab_pic1.png

…最后得到:

编译后的 LaTeX

\begin{figure}[htbp]
\centering
\includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{tab_pic1.png}
\caption{This is the caption.}
\label{table_sometable}
\end{figure}

我想写一个 shell 脚本,在编译之前简单地将其交换\begin{figure}\begin{table}(相同)。\end{figure}.tex文件pdflatex转换为 PDF。

然而,我正在寻找纯 LaTeX 解决方案,因为它更便携并且我的大学里有更多人可以使用它。

看完之后LaTeX 编程:如何实现条件我认为这是可能的,并且决定在这里提出我的问题,因为我进入 LaTeX 世界才 4 天。

我还读过“如何在 TeX 中形成“如果...或...那么”条件?“ 和 ”LaTeX 条件表达式“,但我不确定是否支持字符串解析。

我想象脚本的工作原理如下:

如果在和\label{table_}之间找到一个名为\begin{figure}\end{figure} 然后{figure}用。。。来 代替{table}

我还发现TeXworks 的搜索和替换脚本但也许可以在编译级别处理这一切,这样我就不必运行任何额外的程序,只需在写完后在 Sublime Text 中开始编译即可。


那么这为什么很酷呢……

  • 显然,对于使用 (Multi)Markdown 写作的人来说,这是一件必备品
  • 过滤器还可以将所有图形进一步划分为不同类别(照片/图像、图表……)
  • 其他一些奇怪的内容依赖于在编译 pdf 之前解析内容。

我愿意接受想法、解决方案和链接。

答案1

environ以下是使用和 的实现expl3。使用environ我们吸收整个环境的内容,使用l3regex我们检查环境是否包含标记

\label{table_

通过正则表达式

\c{label}\cB.table_

其中,\c{<string>}控制序列与名称匹配<string>,并且\cB.匹配一个左括号。

\documentclass{article}
\usepackage{environ,xparse,l3regex}

% environ has problems in renewing
% existent environments
\let\figure\relax
\let\endfigure\relax

\NewEnviron{figure}{\CheckForTable}

\makeatletter
\ExplSyntaxOn
\cs_new_protected:Npn \pattulus_check:n #1
 {
  \regex_match:nnTF { \c{label}\cB.table_ } { #1 }
   {
    \@float{table}#1\end@float
   }
   {
    \@float{figure}#1\end@float
   }
 }
\cs_generate_variant:Nn \pattulus_check:n { V }
\NewDocumentCommand{\CheckForTable}{}
 {
  \pattulus_check:V \BODY
 }
\ExplSyntaxOff
\makeatother

\begin{document}
\begin{figure}[htbp]
\centering
THIS SHOULD BE A TABLE
\caption{This is the caption.}
\label{table_sometable}
\end{figure}

\begin{figure}[htbp]
\centering
THIS SHOULD BE A FIGURE
\caption{This is the caption.}
\label{figure_somefigure}
\end{figure}

\end{document}

在此处输入图片描述

2019 年 3 月更新

expl3经过对和进行多次更新后xparse,代码可以减少:

\documentclass{article}
\usepackage{xparse}

\makeatletter
\ExplSyntaxOn

% use the default placements htp
\RenewDocumentEnvironment{figure}{O{htp} +b}
 {\pattulus_check:nn { #1 } { #2 }}
 {}

\cs_new_protected:Nn \pattulus_check:nn
 {
  \regex_match:nnTF { \c{label}\cB.table_ } { #2 }
   {
    \@float{table}[#1]#2\end@float
   }
   {
    \@float{figure}[#1]#2\end@float
   }
 }

\ExplSyntaxOff
\makeatother

\begin{document}
\begin{figure}
\centering
THIS SHOULD BE A TABLE
\caption{This is the caption.}
\label{table_sometable}
\end{figure}

\begin{figure}
\centering
THIS SHOULD BE A FIGURE
\caption{This is the caption.}
\label{figure_somefigure}
\end{figure}

\end{document}

相关内容