我在 ipython 笔记本中的图形下方有单元格,其中包含图形标题文本。我希望它们居中('中心')对齐。我在 Markdown 中使用“<中心>”,这正是我在笔记本中所追求的外观。但是当 nb-converting 到 latex 时,文本会被分流到左边。
那么有没有办法让 nbconvert 在转换为 latex 时识别 markdown 单元格中的文本对齐方式?
谢谢。
最佳答案
您实际上问了两个不同的问题:
- 有没有办法让 nbconvert 识别 markdown 单元格中的文本对齐
- nbconvert 中的图形标题(居中)
广告 1)
要将 markdown 转换为 latex ,使用 pandoc
。不幸的是,如果将 markdown 转换为 latex,pandoc 会从 markdown 中删除原始 html(如果在将 markdown 转换为 html 时也会删除原始 latex)。
因此,使用 html 标签在 html 和 latex 中格式化输出并不是那么简单。这种格式化可以基于单元格元数据来实现,但目前这并不是那么微不足道。
广告 2)
然而,可以创建类似文本的标题来使用 html 和 latex 。
这里我们必须区分 pyout 或流数据的标题(例如 Ipython.display.Image)和 Markdown 图像。
pyout 和流
一种可能的方法是创建一个Caption类
class Caption():
def __init__(self,s):
self.s = s
def _repr_html_(self):
return '<center>{0}</center>'.format(self.s)
def _repr_latex_(self):
return '\\begin{center}\n'+self.s+'\n\\end{center}'
在图像之后调用。请注意,两者都应使用 IPython.display.display
方法调用,例如作为 oneliner
display(Image('image.jpg'),Caption('Figure Caption'))
这种方法允许使用 python 处理标题文本,例如添加图形编号。
如果您想将这样的标题添加到 matplotlib 图,则需要克服错误的顺序,这会有点棘手。一种可能的方法是使用此代码段进行绘图
%matplotlib inline
plt.plot([1,2])
f=plt.gcf()
plt.close()
display(f,Caption('Plot'))
可能会注意到 IPython 1.x 的默认 latex 模板不能很好地使用这种方法,因为在这里,图像和标题只是松散耦合,因此,在 latex 编译期间可能会包含垂直空间。 latex_basic
模板效果更好。在 IPython master 中,默认模板工作正常。
Markdown 图片
Markdown 允许使用像
这样的图片![Caption](/files/image)
当转换为 latex 时,pandoc 可以使用 Caption 部分并创建一个真正的 latex 标题。
类似地,当转换为 html 时,标题会嵌入到标题类中,以便使用 css 轻松设置样式。
但是,目前 IPython 需要一个“/files/”前缀,目前还没有删除,因此图像文件不会被 latex 找到。(现在已修复)
请注意,这些 Markdown 图像调用不会嵌入,而只会将图像链接到 ipynb 文件中,因此,图像必须保持可用。
关于latex - 图标题在 nbconvert 中居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264205/