找回密码
 快速注册
搜索
查看: 466|回复: 12

有时提示缺右大括号,有时又能编译通过

[复制链接]

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2022-2-9 19:22 |阅读模式
如题,有时编译时提示下面的错误:
  1. ! Missing } inserted.
  2. <inserted text>
  3.                 }
复制代码
但对同一个文档,我什么都没改,再次编译又能编译通过,这是怎么回事?
文档太大了,精简后试了几次又没有这个现象了。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-2-9 20:59
你回忆一下,这种情况是不是出现在编译出错中断之后?
如果是,那可能是辅助文件的原因。

830

主题

4862

回帖

3万

积分

积分
36159

显示全部楼层

isee 发表于 2022-2-9 23:18
回复 2# kuing

(修改后)也有类似的这样的情形,我手动把把编辑的缓存“辅助”文件删除再编译就OK了

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-2-10 09:16
回复 2# kuing

经常编译出错,每次出错之后,我按了r键,然后继续编译一次,以前都没有过这个情况,就昨天出现了。现在把aux那些都删除了,现在编译没问题,不太清楚是什么原因。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-2-10 14:03
本帖最后由 abababa 于 2022-2-10 14:17 编辑 回复 4# abababa

这个现象又出现了,我编译了其它文档,还是有这个问题,我就想可能是我在公共的引用部分出了问题,我这两天改的地方有两个,一个是mymark那个加多个星的,这个经过我注释掉以后,发现不是它的问题。另一个是证明的环境:
  1. \usepackage[amsmath, thmmarks]{ntheorem}
  2. {
  3.         \theoremstyle{nonumberplain}
  4.         \theoremheaderfont{\indent\bfseries}
  5.         \theorembodyfont{\normalfont}
  6.         \theoremsymbol{\ensuremath{\Box}}
  7.         \newtheorem{proof}{证明}
  8. }
  9. \theoremheaderfont{\indent\bfseries}
  10. \theorembodyfont{\normalfont}
  11. %环境结束符,只对后面的命令有效
  12. \theoremsymbol{\textup{$\multimap$}}
  13. \newtheorem{example}{例}[section]%缩写exam
  14. \newcommand\exampleautorefname{例}
  15. \newtheorem{exercise}{习题}[section]
  16. \newcommand\exerciseautorefname{习题}
  17. %环境结束符,只对后面的命令有效
  18. \theoremsymbol{\textup{\#}}
  19. \newtheorem{remark}{注}
  20. \newtheorem{proposition}{命题}[section]%缩写ps
  21. \newcommand\propositionautorefname{命题}
  22. \newtheorem{definition}{定义}[section]%缩写def
  23. \newcommand\definitionautorefname{定义}
  24. \newtheorem{theorem}{定理}[section]%缩写thm
  25. \newcommand\theoremautorefname{定理}
  26. \newtheorem{lemma}{引理}[section]
  27. \newcommand\lemmaautorefname{引理}
  28. \newtheorem{property}{性质}[section]
  29. \newcommand\propertyautorefname{性质}%缩写pp
  30. \newtheorem{corollary}{推论}[section]%缩写coro
  31. \newcommand\corollaryautorefname{推论}
  32. \newcommand\equationautorefname{公式}
  33. % 例变为内嵌页
  34. \mdfdefinestyle{exampleStyle}{linewidth=0pt,innerleftmargin=0,innerrightmargin=0,innertopmargin=-\topskip}
  35. \newmdtheoremenv[style=exampleStyle]{xexample}[example]{例}
  36. % 证明变为内嵌页,证明中的脚注在证明下方
  37. \theoremstyle{nonumberplain}
  38. %环境结束符,只对后面的命令有效
  39. \theoremsymbol{$\square$}
  40. \mdfdefinestyle{proofStyle}{linewidth=0pt,innerleftmargin=0,innerrightmargin=0,innertopmargin=-\topskip}
  41. \newmdtheoremenv[style=proofStyle]{xproof}{证明}
复制代码
上面代码第39行,如果我加了这个,有时就会出现缺少大括号的问题,注释掉就没问题了。

试了几次,每次都把aux,log那些文件删除之后再编译,确定就是这一行的问题。这是怎么回事啊,证明最后那个方块不是这样写的吗?

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-2-10 16:33
回复 5# abababa

你还是给一个完整的能重现问题的代码,不然我们没法测试。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-2-11 15:28
回复 6# kuing

$type tex.zip (4.18 KB, 下载次数: 63)

文档太多了,我精简了一下,然后把它们放在压缩包里了。这个在编译时就会出现主楼的问题,如果把theorem_base的第40行注释掉,就没问题了。但即使不注释它,在编译出错时按r,然后再编译一次,也能得到pdf文档。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-2-11 19:16
首先说一下,我系统里没你设定的字体,因此把那几句注释掉了,我相信不影响现在的问题。

开始测试:
第一次编译,通过,生成 PDF 及辅助文件 .aux、.thm、.toc 等,PDF 未有目录,定理后的 # 、证明后的 □ 也都未有。
第二次编译,出现 Missing } inserted 错误,面临两种选择:
(A)中断编译。
此时不生成 PDF ,并且 index.aux、index.toc 变成 0 字节的空文件。
再编译,通过,生成的东西与第一次编译一样,目录、#、□ 也没有。
再再编译,又出现 Missing } inserted 错误;
(B)强行继续编译,直到生成 PDF。
此时 PDF 有目录,有 #,有 □,辅助文件看起来也和第一次编译差不多。
再编译,继续出现 Missing } inserted 错误。

反复试验可确定:只有在没有辅助文件或者中断导致 index.aux、index.toc 为空文件时编译才不会报错。
那应该与这两个文件有关,于是改变操作:
当无报错编译通过后,手动删除 index.aux,再编译,就能通过,有目录,但没有 #,没有 □。
所以与 toc(目录辅助文件)无关,与 index.aux 有关,而且 # 和 □ 都是先放入 aux ,二次编译时才写入正文,问题应该出在这一环节。

吃饭先,待续…………

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-2-12 00:00
你所定义的那些定理环境在贴结束符号时似乎是按照以下方式处理:
假设设置了 \theoremsymbol{XXX} ,则:
(1)当环境结束时是处于水平模式(就是普通文本或者行内公式),那它就用类似于 \hfill + XXX 来贴结束符。
这种情形只需编译一次,符号就会出来。
(2)当环境结束时是处于行间公式,那它就会把 XXX 放入最后的公式里并放到最右边(好像是与公式底部持平)。
这种情形就要二次编译符号才会出来,具体用了啥方法我不清楚,估计是用某种方式获取最后公式的位置,将相关信息记录在 aux ,等下次编译时才写入正文。

你给的示例全是情形(2),所以首次编译完全看不到 # 和 □ ……

以你的 xproof 为例,\theoremsymbol{XXX} 后,将正文改成:
  1. \begin{xproof}
  2. \[test\]
  3. \end{xproof}
  4. \begin{xproof}
  5. test
  6. \end{xproof}
复制代码
结果:
QQ截图20220211235545.png
注意第一个 XXX 的字体,是数学字体,于是:
由于第一个 XXX 本身处于数学模式,若改成 \theoremsymbol{$XXX$} 那就出问题了,而且在第二次编译才报错,因为这个符号在第二次编译才放进去。

故此,当用 \square 之类的数学符号来做结束符,如果直接 \theoremsymbol{\square} ,那第二个 xproof 首次编译就报错,而加 \$ 则如上所述。
正确的方法,要么 \theoremsymbol{\text{$\square$}} 要么 \theoremsymbol{\ensuremath{\square}}

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-2-12 00:36
其实你的 theorem_base.tex 里开头那多余的 3~9 行也出现过 \ensuremath ,看 ntheorem 的文档,例子也都用 \ensuremath :
QQ截图20220212003524.png

\ensuremath ,字面意思,不确定要不要 \$ ,即如果处于数学模式就不加,否则就帮你加。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-2-12 08:47
回复 9# kuing

原来如此,我就说怎么都是在行间公式里出问题,每次都把行间公式单独拿到这里的草稿本上看是不是写得不对,然后还都能正确显示,也没什么错误。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-2-13 17:33
补发:
重现该问题的简单完整代码如下
  1. \documentclass{article}
  2. \usepackage{amsmath,amssymb}
  3. \usepackage[amsmath,thmmarks]{ntheorem}
  4. %\theoremsymbol{\square}           %首次编译 Proof 2 报错
  5. \theoremsymbol{$\square$}         %首次编译通过,二次编译 Proof 1 报错
  6. %\theoremsymbol{\ensuremath\square}%正确方法
  7. \theorembodyfont{\normalfont}
  8. \newtheorem{xproof}{Proof}
  9. \begin{document}
  10. \begin{xproof}
  11. \[test\]
  12. \end{xproof}
  13. \begin{xproof}
  14. test
  15. \end{xproof}
  16. \end{document}
复制代码

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-2-14 09:17
回复 12# kuing

开始不知道哪出问题的时候,觉得各方面都有关联,就怕删除哪块之后就没问题了。现在解决之后马上就能知道是数学环境嵌套出的问题了。

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 12:20

Powered by Discuz!

× 快速回复 返回顶部 返回列表