我想仅使用基本的 LaTeX 安装以合理的方式将一些逐字文本居中,即包listings
和fancyvrb
不可用。
\documentclass{article}
\begin{document}
\begin{center}
hello world
\end{center}
\begin{center}
\begin{verbatim}
def main():
print("hello world")
\end{verbatim}
\end{center}
\end{document}
逐字逐句的文字怎样才能居中?
答案1
如果您真的不想使用任何额外的代码(为什么不呢?我会varwidth
在这里使用)那么您可以使用普通代码minipage
,但您必须告诉它最长的一行上有多少个字符。
\documentclass{article}
\begin{document}
\begin{center}
hello world
\end{center}
\begin{center}\ttfamily\sbox{0}{a}%
\begin{minipage}{24\wd0}% 24 characters here
\begin{verbatim}
def main():
print("hello world")
\end{verbatim}
\end{minipage}
\end{center}
\end{document}
答案2
包varwidth
会有所帮助,因为它可以缩短行数(否则将使用完整的行数\linewidth
):
\documentclass{article}
\usepackage{varwidth}
\begin{document}
\begin{center}
hello world
\end{center}
\begin{center}
\begin{varwidth}{\linewidth}
\begin{verbatim}
def main():
print("hello world")
\end{verbatim}
\end{varwidth}
\end{center}
\end{document}
如果无法通过使用该包\usepackage
,则可以包含其内容:
\makeatletter
... <contents of varwidth.sty without the initial \ProvidesPackage>
\makeatother
例子:
\makeatletter
\newcommand\narrowragged{\rightskip \z@ plus .25\hsize
\@rightskip\rightskip \parfillskip\z@ plus .15\hsize
\sloppy }
\newbox\@vwid@box
...
...
...
\@ifundefined{newcolumntype}{}{%
\@ifundefined{NC@rewrite@V}{
\newcolumntype{V}[1]{%
>{\begin{varwidth}[t]{#1}\narrowragged\let\\\tabularnewline}%
l%
<{\@finalstrut\@arstrutbox\end{varwidth}}}
}{}
}
\makeatother
%
开头的注释行不需要复制,只有代码行很重要。幸运的是,该包不使用选项(v0.92),只是\ProvidesPackage
在外部无法正常工作,需要省略。