multicolumn
每次我开始一个新的小节时,我都会尝试在我的环境中创建一个水平的白色空间。
它让人们不必在页面上的不同内容之间来回寻找,而是以更易读的方式分割页面。
但是,我不断收到以下错误:
! Missing \endcsname inserted.
<to be read again>
\let
l.83 \renewenvironment{\subsection}
{\end{multicols}}{\start{multicols}{2}}
The control sequence marked <to be read again> should
not appear between \csname and \endcsname.
最小示例:
\documentclass[11pt]{article}
\usepackage{multicol}
%\let\origsubsection\subsection
\renewcommand{\subsection}{\end{multicols}\subsection\start{multicols}{2}}
\begin{document}
\section{Something here}
Filler text1
\begin{multicols}{2}
\subsection{This is a test1} %\endMulti startsub \beginMulti
Filler text2
\subsection{This is a test2} %\endMulti startsub \beginMulti
Filler text3
\end{multicols}
\end{document}
答案1
您已经\subsection
根据自身定义了一个无限循环,但您还使用了\start
未定义的命令。您的意图更像这样:
\documentclass[11pt]{article}
\usepackage{multicol}
\let\origsubsection\subsection
\renewcommand{\subsection}[1]{\end{multicols}\origsubsection{#1}\begin{multicols}{2}}
\begin{document}
\section{Something here}
Filler text1
\begin{multicols}{2}
\subsection{This is a test1} %\endMulti startsub \beginMulti
Filler text2
\subsection{This is a test2} %\endMulti startsub \beginMulti
Filler text3
\end{multicols}
\end{document}
答案2
想法与其他答案相同,但是,添加了对带星号的变量和可选参数的支持:
\makeatletter
\let\subsection@old\subsection
\def\subsection@pre{\end{multicols}}
\def\subsection@post{\begin{multicols}{2}}
\newcommand\subsection{\@ifnextchar*\subsection@star\subsection@nostar}
\def\subsection@star*#1{\subsection@pre\old@subsection*{#1}\subsection@post}
\def\subsection@nostar{\@ifnextchar[\subsection@br\subsection@nobr}
\def\subsection@br[#1]#2{\subsection@pre\old@subsection[#1]{#2}\subsection@post}
\def\subsection@nobr#1{\subsection@pre\old@subsection{#1}\subsection@post}
\makeatother
答案3
这是你想要的吗?!我希望如此。如果你还想更改之前的间距section
并subsection
检查这个答案。
我假设您有一篇文章(但没有任何章节)。我还假设您希望整个内容都是,并在每次执行和命令twocolumn
时停止。section
subsection
我使用了宏调用和,而不是\begin{multicols}
和符号。\end{multicols}
\multicols
\endmulticols
\documentclass[11pt]{article}
\usepackage{lipsum} % demo only
\usepackage{multicol}
\AtBeginDocument{\begin{multicols}{2}}
\AtEndDocument{\end{multicols}}
\makeatletter
\let\section@orig\section
\let\subsection@orig\subsection
\renewcommand\section[1]{\endmulticols\section@orig{#1}\multicols{2}}
\renewcommand\subsection[1]{\endmulticols\subsection@orig{#1}\multicols{2}}
\makeatother
\begin{document}
\show\section
\show\subsection
\section{Section}
\lipsum[1]
\subsection{Subsection}
\lipsum[2]
\subsection{Subsection}
\lipsum[3]
\section{Section}
\lipsum[4]
\subsection{Subsection}
\lipsum[5]
\subsection{Subsection}
\lipsum[6]
\end{document}
注意:lipsum
仅存在于演示文本中。
我也尝试过使用xpatch
,但是我并没有解决问题,反而制造了问题……这是部分代码。我不知道如何修复这个问题……\protect
除了消除错误之外,似乎没有解决任何问题……相关主题:脆弱命令和坚固命令之间有什么区别?
\documentclass[11pt]{article}
\usepackage{lipsum} % demo only
\usepackage{multicol}
\usepackage{xpatch}
\AtBeginDocument{\begin{multicols}{2}}
\AtEndDocument{\end{multicols}}
\xpretocmd{\section}{\endmulticols}{}{}
\xapptocmd{\section}{\protect\multicols{2}}{}{}
\xpretocmd{\subsection}{\endmulticols}{}{}
\xapptocmd{\subsection}{\protect\multicols{2}}{}{}
\begin{document}
\section{Section}
\lipsum[1]
\subsection{Subsection}
\lipsum[2]
\subsection{Subsection}
\lipsum[3]
\section{Section}
\lipsum[4]
\subsection{Subsection}
\lipsum[5]
\subsection{Subsection}
\lipsum[6]
\end{document}