找回密码
 快速注册
搜索
查看: 906|回复: 2

请教怎么自动识别documentclass

[复制链接]

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2020-11-23 17:43 |阅读模式
如题。因为之前打了几个文档,还有一些书,觉得那些包这篇引入了,那篇又没引入,不太方便,现在就把这些包都做成一个base.tex,然后想这样引入:
  1. \documentclass[10pt]{article}
  2. \input{base}
  3. \begin{document}
  4. \end{document}
复制代码
然后在base.tex里有一个:
\renewcommand{\chaptername}{}

这个只能在book类型的文档中使用,能不能类似下面这样:
\if documentclass=book
\renewcommand{\chaptername}{}
\fi

让这个base.tex在book和article里都能直接引用,其它的还有一些对chapter的设置也是,都想放到那个if里。这个要怎么做?

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2020-11-23 22:21
那你可以通过判断 \chapter 是否存在来确定是不是 article

举个简单栗子:
  1. \documentclass{article}
  2. \newif\ifart
  3. \ifx\chapter\undefined\arttrue\fi
  4. \begin{document}
  5. the document class is
  6. \ifart
  7. article
  8. \else
  9. not article
  10. \fi
  11. \end{document}
复制代码
将文档类换成 book 就会有不同结果。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2020-11-24 10:01
回复 2# kuing

谢谢,原来这么多if类型,经过2楼提示,在网上找到一个ifdefined
不过还有些地方不太明白,猜测这个ifdefined应该是判断chapter是否定义过,如果定义过就把中间的执行了,但我下面的代码并不能运行。如果把\ifdefined\chapter改成\ifdefined\chaptername,这样就能成功运行了,也确实是我需要的效果:在article里就不管chapter了,在book里才使用定义的样式。那这个\chapter到底在哪定义过呢?为什么article里也找到它了?
  1. \documentclass[10pt]{article}
  2. \usepackage[small,center,pagestyles]{titlesec}
  3. \ifdefined\chapter
  4. \titleformat{\chapter}[hang]{\Large\bfseries}{\chaptername}{1em}{}
  5. \renewcommand{\chaptername}{}
  6. \fi
  7. \begin{document}
  8. \tableofcontents
  9. \chapter{测试章}
  10. \section{测试节}
  11. 测试文本
  12. \end{document}
复制代码

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

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

Powered by Discuz!

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