Skip to content
This repository has been archived by the owner on Apr 24, 2023. It is now read-only.

子图组插入问题,以及关于代码复用性的讨论 #38

Closed
andnot opened this issue Apr 4, 2015 · 5 comments
Closed

子图组插入问题,以及关于代码复用性的讨论 #38

andnot opened this issue Apr 4, 2015 · 5 comments

Comments

@andnot
Copy link
Contributor

andnot commented Apr 4, 2015

最近在使用论文模板时遇到一个图片插入方面的疑问,不知模板自定义的addsubpic插入子图函数是否是以subfloat函数为基础包装的呢?

我之前自己写的TeX文档用的全部都是subfloat函数来实现插入子图组功能,出来的效果和《基于东拼西凑的电子科技大学毕业论文LaTeX模板生成样例》中4.4.3.4节给出的例子相同,可是当我把代码复制进论文模板时,编译就出错了。

考虑到论文自定义了一套插图命令,于是我将原来的函数批量替换掉,比如将\begin{figure}改为\begin{pics}\subfloat改为\addsubpic等,可是编译依然报错。

模板自定义的插图命令和常用的figure环境到底有多少不同呢?说明文档中的“插入图片”一节对这几个新定义函数的语法解释也略显单薄,仅仅看说明中的两个例子,很难学会如何把已有的代码迁移过来。

这样的话,如果想要在论文中插图,很多此类TeX代码就必须重新写一遍了,这个时间成本着实有点高……我想LaTeX的一个巨大优势就是代码复用性很高,这是一切纯文本编辑的共同特点,如果这种高度一致性不能得到保障,那么其优势也会大打折扣。

当然,也可能是我多虑了,从论文模板的其他方面来看(比如数学公式和参考文献等),其代码复用性已经很好,我将以前写的TeX源码插入到模板中后,基本上不必做很大改动就可顺利编译,很给力。

可是子图组插入的问题我始终没有找到好的解决之道;由于插图在论文中占得比重很大,我对这一块的功能比较敏感,不知这方面的问题可有比较妥善的解决方法?

谢谢!

P.S. 补充一段我原TeX文档中的子图组代码,希望可以找到一种较为快捷的方法将其转换为论文模板可用的代码。示例如下:

\begin{figure*}
\hfill{}\subfloat[SNRs \label{fig:rmse_snr}]{\begin{centering}
\includegraphics[width=0.46\textwidth]{fig/Figure_1}
\par\end{centering}

}\hfill{}\subfloat[separations \label{fig:rmse_ang}]{\begin{centering}
\includegraphics[width=0.46\textwidth]{fig/Figure_2}
\par\end{centering}

}\hfill{}

\protect\caption{RMSE comparison by 500 Monte-Carlo trials}
\end{figure*}
@shifujun
Copy link
Owner

shifujun commented Apr 5, 2015

我最近十分忙,不能详细解释代码。你能否先告诉我你是不是看过Wiki了?另外模板自定义的插图命令可以在源代码中找到。dtx文件编译出的源码说明文档中更清晰一些。

@shifujun
Copy link
Owner

shifujun commented Apr 5, 2015

另外,你下面示例的那段代码原本就不应该那样写。那里面有很多涉及格式的命令,按照LaTeX的思路应该先定义成自定义的命令,这样才便于修改便于移植。考虑到你已经写了很多这样的插图代码。我想唯一的办法就是用正则表达式进行替换。希望你会用正则表达式。

@andnot
Copy link
Contributor Author

andnot commented Apr 5, 2015

@shifujun wiki以及issue的每一篇我都认真看过了。dtx我也编译出来看了,不过还是不大明白……

我的代码之所以这样写是因为在文章的不同地方我可能会希望以不同的格式排版,当然我这种用法可能不够高效,这里仅仅是个示例。

不过就我近几天使用模板的插图命令来看,我觉得这套自定义的命令与通常的插图命令语法还是有较大出入的,比如:

  • 对于常见的includegraphics插图命令来说,不会把图片宽高比作为必选参数(这个参数是以方括号形式存在的);而模板自定义的pic命令和addsubpic命令就必须输入这个参数(以花括号形式存在);
  • 类似的,\begin{pics}后面跟着的第三个参数是图片组的整体标签,这个属性对于插图来说应该并非必需的,而模板也将之规定为必要参数。如果缺失这个整体标签,编译就会出错;
  • 子图组中两个\addsubpic命令行之间必须紧邻,不能有空行,否则编译出的两幅子图位置就变成上下放置了。这个问题还是蛮隐蔽的,我检查了很久才发现。如果有遇到相同问题的同学,敬请注意。

这里列举的几个小问题,并非指摘自定命令,而仅仅是从我自身的使用体验来说,感觉和常见命令的用法出入有些大。我觉得关于命令的参数、属性规定,最好能有一些弹性。譬如一幅插图是否要加上标签,应该交给用户自己去定夺。

一点浅见,还望指正。

@shifujun
Copy link
Owner

shifujun commented Apr 7, 2015

图表命令的包装不仅仅是为了帮助LaTeX的初学者正确插入图片,而且还将图表的格式控制从用户手中拿走。因为学校规范是对图表有特别规定的,比如图片应该居中,图的标题应该在上,表的标题应该在下,图表前后间距。这些东西如果以零散的命令写出来,不能做到由模板统一控制这些格式。所以包装是有必要的。

其次,LaTeX的命令中只能定义一个可选参数,而且必须是第一个参数。这就很难灵活了。

总之,像你这样的LaTeX熟练用户,其实完全可以自己重新定义一个你喜欢的插图命令,只要和模板定义的效果一致,前后间距什么的都一样就行了啊。反正,我非常不建议直接将includegraphics命令和figure环境暴露在论文正文的源码中。

@andnot
Copy link
Contributor Author

andnot commented Apr 7, 2015

@shifujun 原来如此,明白了!
多谢指教:)

P.S.
我今天又详细看了一遍dtx,虽然还是不太懂,但明显能感到这份模板的用心良苦。
能在毕业之前用上自己学校的LaTeX模板,真是一件幸事。
辛苦了。

@shifujun shifujun closed this as completed Apr 8, 2015
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants