虽然我可以用功能齐全的 LaTeX 编写“真正的”文档,但我经常切换到重新结构化文本作为简单文档(如会议记录等)的轻量级标记语言。我对我的工作流程非常满意(file.txt -> rst2latex-2.6.py -> pdflatex -> file.pdf
),直到最近我决定要使用该类memoir
,就像我处理真实文档一样。
这reStructuredText 的文档指出该类通过--documentclass=memoir
选项受支持。但是,我的文档现在无法编译,因为存在一些我不太明白的命令脆弱性问题:
标题和章节标题将转换为如下内容:
\title{\phantomsection%
This it the title%
\label{this-it-the-title}}
看起来没什么article
问题,但最后却memoir
出错了(日志文件中大约有 15 个错误)。
这是一个明显但未记录的错误,还是我首先做了一些明显错误的事情?
最小(不)工作示例:
#!/bin/sh
rm -f test.*
cat >> test.txt <<EOF
This it the title
=================
this is dummy text
EOF
rst2latex-2.6.py -V
rst2latex-2.6.py --verbose --documentclass=memoir test.txt test.tex
pdflatex -interaction=nonstopmode test.tex
至于输出,我得到了:
rst2latex-2.6.py (Docutils 0.9 [release], Python 2.6.8, on darwin)
This is pdfTeX, Version 3.1415926-2.3-1.40.12 (TeX Live 2011/MacPorts 2011_5)
...
(...then the usual latex yada yada, including about 15 "errors"...)
...
! ==> Fatal error occurred, no output PDF file produced!
Transcript written on test.log.
以防万一,这里是 docutils 生成的完整(且不正确的)LateX 文档:
\documentclass[a4paper]{memoir}
% generated by Docutils <http://docutils.sourceforge.net/>
\usepackage{fixltx2e} % LaTeX patches, \textsubscript
\usepackage{cmap} % fix search and cut-and-paste in Acrobat
\usepackage{ifthen}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
%%% Custom LaTeX preamble
% PDF Standard Fonts
\usepackage{mathptmx} % Times
\usepackage[scaled=.90]{helvet}
\usepackage{courier}
%%% User specified packages and stylesheets
%%% Fallback definitions for Docutils-specific commands
% hyperlinks:
\ifthenelse{\isundefined{\hypersetup}}{
\usepackage[colorlinks=true,linkcolor=blue,urlcolor=blue]{hyperref}
\urlstyle{same} % normal text font (alternatives: tt, rm, sf)
}{}
\hypersetup{
pdftitle={This it the title},
}
%%% Title Data
\title{\phantomsection%
This it the title%
\label{this-it-the-title}}
\author{}
\date{}
%%% Body
\begin{document}
\maketitle
this is dummy text
\end{document}
答案1
问题出在生成的代码中
%%% Title Data
\title{\phantomsection%
This it the title%
\label{this-it-the-title}}
article
在和其他类中有效,但memoir
由于扩展不及时,在 中无效。
一个解决方法是说服 rst2latex 放在和\protect
之前,但我真的不明白里面的那些命令应该做什么。\phantomsection
\label
\title
答案2
吉奥姆,
我建议你采取以下措施回答,这解释了当 hyperref 与目录中未包含的节标题(带有星号的节命令)一起使用时或在目录中手动包含标题时,需要此说明,以正确引用标题而不是不同的段落。