已知事实:
在Verbatim
环境中,每个 LaTeX 命令都将作为纯文本处理。但是,我需要一个有效的命令Verbatim
。
客观的:
我有一个sample.cls
文件,它将被\VerbatimInput
放到主.tex
文件中,以便我可以在读入后在主文件中参考解释。以下是我用来输入的代码sample.cls
\fvset{frame=none,numbers=left,numbersep=3pt,firstline=1,lastline=20}
\VerbatimInput[commandchars=+\[\]]{sample.cls}
读入后的图像如下所示(这sample.cls
是临时的,包含以下几行。)
例如,我指的是第 (9) 行和第 (13) 行之间的块。请注意,我使用的标签格式sample.cls
是+label[vrb:test1]
和+label[vrb:test2]
,由于在 Verbertim 环境中是两个控制序列,因此在这里看不到它们。
通过在结构中插入命令的引用方案Verbatim
工作正常,但是 LaTeX 会抱怨这些命令,因为它们嵌入在sample.cls
主文件需要(正在使用)的命令中。
简而言之,标签+label[vrb:test1]
和+label[vrb:test2]
相当于环境中的动作命令\label{vrb:test1}
和,但 LaTeX 会出现错误。\label{vrb:test1}
Verbatim
问题:
尽管按下ENTER键仍然可以完成编译,但我写信是为了寻求帮助解决这个困境(即不需要按下ENTER键)以及如何避免这些矛盾。
获得错误信号,Window,TeXworks 环境
60
LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.60 \setlength{\topmargin}{-0.5cm} +
label[vrb:psize1]
89
LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.89 +
label[vrb:cc]
175
LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.175 +
label[vrb:title1]
样本.cls
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{sample}[Sample class]
%-------------------------- initial code -----------------------
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
+label[vrb:test1]
%-------------------------- initial code -----------------------
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
%-------------------------- executation ---------------------
\ProcessOptions\relax
\LoadClass[a4paper,openright]{report}
+label[vrb:test2]
\endinput
主文件
\documentclass[12pt]{sample}
\usepackage{fancyvrb}
\begin{document}
\fvset{frame=none,numbers=left,numbersep=3pt,firstline=1,lastline=20}
\VerbatimInput[commandchars=+\[\]]{sample.cls}
For example, the block between line (\ref{vrb:test1}) and line (\ref{vrb:test2}) is
what I am refering to. Notice that the label format I used in sample.cls are +
label[vrb:test1] and + label[vrb:test2], which are not seen here due to being two
control sequences in Verbertim. environment.
\end{document}
答案1
我没有收到任何错误\VerbatimInput
;但你的类文件当然是非法的,错误消息
LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.60 \setlength{\topmargin}{-0.5cm} +
label[vrb:psize1]
很清楚:在加载类时,+
开始排版,这在加载类或包时显然是不允许的。
您可以通过将标签隐藏在注释字符后面来避免这种情况:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{sample}[Sample class]
%-------------------------- initial code -----------------------
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}} % +label[vrb:test1]
%-------------------------- initial code -----------------------
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
%-------------------------- execution ---------------------
\ProcessOptions\relax
\LoadClass[a4paper,openright]{report} % +label[vrb:test2]
\endinput
然而,方括号不会被打印,因为当文本被处理时它们会被视为大括号\VerbatimInput
。