Org-mode编写信函地址块 解决导出PDF/HTML/ODT缩进失效问题
Org-mode 信函地址块跨导出格式布局保留方案
手动使用indent to功能插入的行首缩进属于编辑阶段的临时空白字符,Org-mode导出为HTML、PDF、ODT格式时,默认会过滤这类无语法标记的空白,因此无法保留布局。要实现发件人地址居左、收件人地址居右且三类格式导出均生效,可直接使用以下三种兼容方案:
方案1:无框表格实现(原生兼容,配置成本最低)
- 插入1行2列的无框表格,左列默认居左放置发件人信息,右列设置右对齐放置收件人信息,Org原生支持三类导出格式的表格对齐属性识别,不会出现格式丢失问题。
- 可直接复用如下示例代码:
#+ATTR_HTML: :border 0 :cellpadding 0 :cellspacing 0 :width 100% #+ATTR_LATEX: :align p{0.45\textwidth}p{0.45\textwidth} :border 0 #+ATTR_ODT: :rel-width 100% :border 0 | *发件人* | *收件人* | | 张三 | 李四 | | XX市XX区XX路123号 | YY市YY区YY路456号 | | 邮编:100000 | 邮编:200000 | | 电话:13xxxxxxx | 电话:13xxxxxxx |
- 右列内容前可手动补空格调整视觉位置,导出时单元格对齐规则会自动生效,无需额外写样式代码。
方案2:自定义块+全局样式配置(纯文本编辑体验最优)
- 不需要插入表格,在文档头部预先配置三类导出格式的对齐样式,给发件人、收件人地址块分别套上自定义标签,导出时会自动应用对齐规则。
- 配置示例如下:
#+HTML_HEAD: <style>.sender{width:45%;float:left;text-align:left}.receiver{width:45%;float:right;text-align:right}.clear{clear:both}</style> #+LATEX_HEADER: \newenvironment{sender}{\begin{flushleft}}{\end{flushleft}} #+LATEX_HEADER: \newenvironment{receiver}{\begin{flushright}}{\end{flushright}} #+ODT_EXTRA_STYLES: <style:style style:name="Sender" style:family="paragraph"><style:paragraph-properties fo:text-align="start"/></style:style><style:style style:name="Receiver" style:family="paragraph"><style:paragraph-properties fo:text-align="end"/></style:style> #+BEGIN_sender *发件人* 张三 XX市XX区XX路123号 邮编:100000 电话:13xxxxxxx #+END_sender #+BEGIN_receiver *收件人* 李四 YY市YY区YY路456号 邮编:200000 电话:13xxxxxxx #+END_receiver #+HTML: <div class="clear"></div>
- 该方案编辑界面无表格分隔线等冗余元素,纯文本写作观感和普通信函一致,适合高频撰写正式信函的场景。
方案3:分格式导出块适配(适合短文档快速调整)
- 如果只是单篇短文档需要调整,不想做全局配置,可以直接在地址位置插入对应格式的导出块,写入对应格式的对齐代码,Org导出时会自动将块内内容嵌入目标文件。
- 示例代码如下:
#+BEGIN_EXPORT html <div style="width:45%;float:left;text-align:left"> <p><strong>发件人</strong><br>张三<br>XX市XX区XX路123号<br>邮编:100000<br>电话:13xxxxxxx</p> </div> <div style="width:45%;float:right;text-align:right"> <p><strong>收件人</strong><br>李四<br>YY市YY区YY路456号<br>邮编:200000<br>电话:13xxxxxxx</p> </div> <div style="clear:both"></div> #+END_EXPORT #+BEGIN_EXPORT latex \begin{flushleft} \textbf{发件人}\\ 张三\\ XX市XX区XX路123号\\ 邮编:100000\\ 电话:13xxxxxxx \end{flushleft} \begin{flushright} \textbf{收件人}\\ 李四\\ YY市YY区YY路456号\\ 邮编:200000\\ 电话:13xxxxxxx \end{flushright} #+END_EXPORT #+BEGIN_EXPORT odt <text:p text:style-name="Sender"><text:span text:style-name="Bold">发件人</text:span><text:line-break/>张三<text:line-break/>XX市XX区XX路123号<text:line-break/>邮编:100000<text:line-break/>电话:13xxxxxxx</text:p> <text:p text:style-name="Receiver"><text:span text:style-name="Bold">收件人</text:span><text:line-break/>李四<text:line-break/>YY市YY区YY路456号<text:line-break/>邮编:200000<text:line-break/>电话:13xxxxxxx</text:p> #+END_EXPORT
注意:所有靠手动输入空格、Tab凑出来的行首缩进,都会被Org导出器判定为无意义的编辑辅助字符过滤,无论缩进量设置多大,都无法在导出文件中保留。
内容的提问来源于stack exchange,提问作者Michel Lecomte
相关产品推荐
相关产品推荐

