我有一个想法给你:
我在 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}