我一直在苦苦思索如何排版一份包含一些代码示例的文档。经过几天的调查,我终于缩小了问题的范围。
这是序言(编辑:更短的代码):
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{tocloft}
\usepackage[most,listings,minted]{tcolorbox}
\usepackage[english]{babel}
\newtcblisting[auto counter,number within=chapter,list inside=loe]{cxmpl}[2]{listing engine=minted,minted language=#1,minted options={breaklines,autogobble,linenos,fontsize=\small,numbersep=3mm},title=\textbf{Code~\thetcbcounter:} #2}
\newtcbtheorem[use counter from=cxmpl,list inside=loe]{xmpl}{Example}{}{xmp}
\begin{document}
\chapter{One}
\begin{minted}{csharp}
int main() {printf("hello, world");return 0;}
\end{minted}
\begin{cxmpl}{csharp}{A different code}
int main() {printf("hello, northpole");return 0;}
\end{cxmpl}
\begin{xmpl}{An example}
this is just an example
\end{xmpl}
\begin{minted}{csharp}
int main() {printf("hello, sun");return 0;}
\end{minted}
\begin{cxmpl}{csharp}{Some different code}
int main() {printf("hello, woods");return 0;}
\end{cxmpl}
\end{document}
产生以下输出(没有错误):
在 1.2 中缺少“t”,并且 1.1 和 1.3 显示的代码不正确。
在没有 minted 环境的情况下排版相同的代码会产生以下输出:
删除所有文件和文件夹后排版会产生以下错误和输出:
奇怪的是,控制台会针对每个cxmpl
环境显示此消息。但它们不会显示在日志中:
Python was not found but can be installed from the Microsoft Store: https://go.microsoft.com/fwlink?linkID=2082640
Error: cannot read infile: [Errno 2] No such file or directory: 'test_pygments.pyg'
现在我很迷茫,因为我无法解释这个问题从何而来。
答案1
欢迎来到 TeX.SE,感谢您使您的示例更简短、更完整(您仍可以为了回答这个问题而删除一些包,但这是一个好的开始)。您的代码中有两个不相关的问题。
第一个问题与列表无关;您只是误用了xmp
定义的环境\newtcbtheorem
。此类环境采用额外的参数,用于定义由 生成的框的标签tcolorbox
(与 和/tcb/label separator
传递给 的第四个强制参数一起\newtcbtheorem
)。请参阅图书馆定理在里面tcolorbox 手册(4.22 版第 350 页)。简而言之,您必须像xmp
这样调用环境:
\begin{xmpl}{An example}{some-possibly-empty-label}
this is just an example
\end{xmpl}
在您的情况下,您没有传递参数some-possibly-empty-label
,因此xmpl
环境抓取下一个标记作为参数,即t
您情况下的字母。
第二个问题是,您在定义环境时没有listing only
在选项中使用。因此,您的代码首先使用(逐字和彩色)进行排版,\newtcblisting
cxmpl
minted
然后也解释为下部的 LaTeX 代码tcolorbox
(您注意到了水平虚线,对吧?它将上部与下部分开)。这就是为什么下部的括号消失的原因:对于标准类别代码制度下的 TeX,它们仅表示组的开始和组的结束;这不会导致括号的排版。默认设置非常适合 LaTeX 代码示例,在这些示例中,最好在代码旁边看到格式化的输出。对于其他语言,listing only
通常更合适。
以下是修复了两个问题的代码:
\documentclass{book}
\usepackage{geometry}
\usepackage[listings, minted, theorems]{tcolorbox}
\newtcblisting[auto counter, number within=chapter, list inside=loe]{cxmpl}[2]{
listing engine=minted, minted language={#1}, listing only,
minted options={breaklines, autogobble, linenos, fontsize=\small,
numbersep=3mm},
title={\textbf{Code~\thetcbcounter:} #2},
}
\newtcbtheorem[use counter from=cxmpl, list inside=loe]{xmpl}{Example}{}{xmp}
\begin{document}
\chapter{One}
\begin{minted}{csharp}
int main() {printf("hello, world"); return 0;}
\end{minted}
\begin{cxmpl}{csharp}{A different code}
int main() {printf("hello, northpole"); return 0;}
\end{cxmpl}
\begin{xmpl}{An example}{some-possibly-empty-label}
This is just an example.
\end{xmpl}
\begin{minted}{csharp}
int main() {printf("hello, sun"); return 0;}
\end{minted}
\begin{cxmpl}{csharp}{Some different code}
int main() {printf("hello, woods"); return 0;}
\end{cxmpl}
\end{document}
答案2
因此,经过一些研究以及一些错误和尝试后,我找到了以下解决方案:
不知何故,尽管我手动将 python 目录添加到路径变量以及脚本的路径变量中,但命令提示符无法识别python
(按下 Enter 并打开 Windows 商店后没有显示任何内容,这可以解释错误Python was not found but can be installed from the Microsoft Store: https://go.microsoft.com/fwlink?linkID=2082640
)。奇怪的是,我能够安装并运行pip
(pygments
这也许可以解释为什么 minted 包运行良好)
为了解决这个问题,我使用以下选项完全重新安装了 python:
然后将python
结果输入
最后,我安装pygments
并重新运行了 LaTeX,但仍然产生了错误的输出。
最后一个问题只是因为所有旧文件仍然存在。删除它们并重新运行 LaTeX 解决了这个问题。
希望这在未来也能对其他人有用。