假设我想重新定义itemize
环境,或者制作它的修改版本。我想知道它目前是如何定义的。我在哪里可以找到这些信息?如果是某个特定的包命令,我可以查看.sty
该包的文件,但如果是更基本的东西,我不知道在哪里查看...
有没有一本参考手册可以解释所有这些内容?或者在我的 texmf 树深处是否有一个文件可供我查阅?
答案1
LaTeX 本身有文档记录source2e.pdf
(texdoc source2e
)和标准类(,,,article
等)记录在book
report
classes.pdf
(texdoc classes
)。
答案2
要了解命令是如何定义的,可以使用以下命令\show
:
\documentclass{article}
\begin{document}
\show\itemize
\end{document}
日志文件将显示:
> \itemize=macro:
->\ifnum \@itemdepth >\thr@@ \@toodeep \else \advance \@itemdepth \@ne \edef \@
itemitem {labelitem\romannumeral \the \@itemdepth }\expandafter \list \csname @itemitem \endcsname {\def \makelabel ##1{\hss \llap {##1}}}\fi .
l.3 \show\itemize
要找到包含定义的文件,该脚本texgrep
很有用,我发布了该脚本来回答这个主题:查找整个 texmf 树。
答案3
现在(la)texdef
CTAN 上的脚本可用于显示 (La)TeX 定义。当前版本还支持显示定义宏的包,但您需要声明要加载的包列表。itemize
用法如下
latexdef -f itemize
或者,如果仅texdef
由你的发行版安装(latexdef
仅是一个激活 LaTeX 模式的符号链接texdef
):
texdef -t latex -f itemize
打印结果为:
\itemize is defined by (La)TeX.
\itemize:
macro:->\ifnum \@itemdepth >\thr@@ \@toodeep \else \advance \@itemdepth \@ne \edef \@itemitem {labelitem\romannumeral \the \@itemdepth }\expandafter \list \csname \@itemitem \endcsname {\def \makelabel ##1{\hss \llap {##1}}}\fi
要显示任何包中任何宏的定义,请使用:
latexdef -p package macro
请参阅latexdef --help
以了解更多信息。
-s
使用 2012/05/02 的 v1.6,您还可以使用/选项获取大多数宏的原始源代码--source
:
$ latexdef -f itemize -s -E
% latex.ltx, line 4556:
\def\itemize{%
\ifnum \@itemdepth >\thr@@\@toodeep\else
\advance\@itemdepth\@ne
\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
\expandafter
\list
\csname\@itemitem\endcsname
{\def\makelabel##1{\hss\llap{##1}}}%
\fi}
% latex.ltx, line 4565:
\let\enditemize =\endlist
% latex.ltx, line 4422:
\def\endlist{%
\global\advance\@listdepth\m@ne
\endtrivlist}
这里-E
讲的itemize
是一个环境。
答案4
这些答案都不太方便,所以我整理了一个小脚本它基本上会遍历整个 LaTeX(在我的例子中是 TeX Live,因此得名)安装并查找单个命令/环境名称。它识别一些(不是全部)定义命令和环境的方法(参见注释)。
这听起来工作量很大,但速度确实非常快。这不禁让你疑惑为什么 LaTeX “IDE” 不做类似的事情。
例如,在完整安装 TeX Live 后,你将获得
~$ tlwhich todo
Files that define command todo:
easy-todo.sty
lilyglyphsStyle.sty
todonotes.sty
todo.sty
tudscrdoc.cls
udesoftec.cls
Files that define environment todo:
ed.sty
Files that provide a package with similar name:
easy-todo.sty
fixmetodonotes.sty
todonotes.sty
todo.sty
grep
可以使用正则表达式(与 兼容):
~$ tlwhich "align(\*|ed)?"
Files that define command align(\*|ed)?:
amstex.sty
divers.sty
dprogress.sty
euro.sty
Files that define environment align(\*|ed)?:
amsmath.sty
amstex.sty
Files that provide a package with similar name:
asyalign.sty
如果它没有找到应该找到的东西,请给我留言(或在 Github 上留言)。