SO Q & A所示,我发现\ textwidth似乎令人困惑。

在正常情况下,它是文本的宽度,但是此变量似乎没有关于带有multicol的文本宽度的正确信息。

这是LaTeX代码,用于打印\ textwidth的宽度(我从here复制了代码)。

\ documentclass [] {article}
\ usepackage {layouts}
\ usepackage {multicol}

\ usepackage [left = 20mm,right = 20mm,top = 33.95mm,bottom = 33.95mm] {几何形状}

\ begin {document}
以厘米为单位的文本宽度:\ printinunitsof {cm} \ prntlen {\ textwidth}

\ begin {multicols} {2}
以厘米为单位的文本宽度:\ printinunitsof {cm} \ prntlen {\ textwidth}
\ end {multicols}

\ end {document}


因此,对于多列的情况,不可能使用\ textwidth框住文本。

\ begin {tikzpicture}
\ draw node [draw = black,fill = black!20,圆角,内部sep = 2ex,文本宽度= \ textwidth] {
Lorem ipsum dolor坐在amet \ dots
};
\ end {tikzpicture}


要么

\ colorbox {红色} {\ parbox {\ textwidth} {红色背景上的黑色文字}}



如何知道多列文档的实际\ texwidth?
\ linewidth怎么了?我尝试了以下示例,但显示的结果不正确。 \ listing环境为我提供了正确的结果。



\ documentclass [] {article}
\ usepackage {layouts}
\ usepackage {multicol}
\ usepackage {tikz}
\ usepackage {颜色}
\ usepackage {列表}

\ usepackage [left = 20mm,right = 20mm,top = 33.95mm,bottom = 33.95mm] {几何形状}

\ begin {document}
以厘米为单位的文本宽度:\ printinunitsof {cm} \ prntlen {\ textwidth}
以厘米为单位的文本宽度:\ printinunitsof {cm} \ prntlen {\ linewidth}

\ colorbox {darkgray} {红色背景上的黑色文字}

\ noindent \ colorbox {darkgray} {\ parbox {\ linewidth} {红色背景上的黑色文字}}

\ begin {multicols} {2}


这个很深。还记得etaoin shrdlu吗? (也许您没有。没关系,有关该主题的公告即将发布。)还记得光明会吗? Lorem ipsum是同样的事情-那些不断出现的难以理解的短语之一。当然这意味着某些东西。您肯定知道,它是利用强大的力量进行投资的。 Lorem ipsum,我的孩子们。那就这样吧。

以厘米为单位的文本宽度:\ printinunitsof {cm} \ prntlen {\ textwidth}
以厘米为单位的文本宽度:\ printinunitsof {cm} \ prntlen {\ linewidth}

这个很深。还记得etaoin shrdlu吗? (也许您没有。没关系,有关该主题的公告即将发布。)还记得光明会吗? Lorem ipsum是同样的事情-那些不断出现的难以理解的短语之一。当然这意味着某些东西。您肯定知道,它是利用强大的力量进行投资的。 Lorem ipsum,我的孩子们。那就这样吧。


\ noindent \ colorbox {darkgray} {红色背景上的黑色文字}

\ noindent \ colorbox {darkgray} {\ parbox {\ linewidth} {红色背景上的黑色文字}}

\ noindent \ begin {tikzpicture}
\ draw node [draw = black,fill = black!20,圆角,内部sep = 2ex,文本宽度= \ linewidth] {
Lorem ipsum dolor坐在amet \ dots
};
\ end {tikzpicture}

\ definecolor {darkgray} {rgb} {0.95,0.95,0.95}
\ lstset {backgroundcolor = \ color {darkgray}}
\ lstset {列=全柔性,basicstyle = \ ttfamily,basicstyle = \ tiny,数字=左,numberstyle = \ tiny,stepnumber = 2,numbersep = 5pt}
\ begin {lstlisting} [frame = tb]
(let((buffer(url-retrieve-synchronously
“ http://tromey.com/elpa/package-install.el”)))
(保存游览
(设置缓冲区缓冲区)
(go-char(点-分钟))
(re-search-forward“ ^ $” nil'move);; $
(评估区域(点)(点-masx))
(kill-buffer(当前缓冲区)))
\ end {lstlisting}

\ end {multicols}

\ end {document}


http://img571.imageshack.us/img571/1867/screenshot20100718at407.png

最佳答案

看一下下面的代码,它会导致方框与列文本的右边距齐平。在multicol环境中,\ linewidth似乎不是文本的宽度。相反,(我认为)列文本的宽度计算为\ linewidth-(\ columnsep / #ofCols)。同样在tikz图片中,内部分隔添加到了框的宽度中,因此在设置框的宽度时必须减去它。至少在我看来就是这样:

\documentclass[]{article}
\usepackage{layouts}
\usepackage{multicol}
\usepackage{tikz}
\usepackage{color}
\usepackage{listings}

\usepackage[left=20mm,right=20mm,top=33.95mm,bottom=33.95mm]{geometry}

\begin{document}
textwidth in cm: \printinunitsof{cm}\prntlen{\textwidth}
textwidth in cm: \printinunitsof{cm}\prntlen{\linewidth}

\colorbox{darkgray}{Black text on red background}

\noindent\colorbox{darkgray}{\makebox[\linewidth]{Black text on red background}}

\begin{multicols}{2}


This one is deep. Remember etaoin shrdlu? (Maybe you don't. Never mind, a bulletin on the subject is forthcoming.) Remember the Illuminati and fnord? Lorem ipsum is the same deal--one of those inscrutable phrases that just keeps turning up. Surely it means something. Surely it's invested with, you know, mysto power. Lorem ipsum, my children. So mote it be.

textwidth in cm: \printinunitsof{cm}\prntlen{\textwidth}
textwidth in cm: \printinunitsof{cm}\prntlen{\linewidth}
\newlength{\mywidth}
\setlength{\mywidth}{\linewidth}
\addtolength{\mywidth}{-0.5\columnsep}
\newlength{\mytikzwidth}
\setlength{\mytikzwidth}{\linewidth}
\addtolength{\mytikzwidth}{-4ex}
mywidth: \the\mywidth\\ columnsep: \the\columnsep\\
\noindent\colorbox{lightgray}{\makebox[\mywidth][c]{Black text on red background}}

This one is deep. Remember etaoin shrdlu? (Maybe you don't. Never mind, a bulletin on the subject is forthcoming.) Remember the Illuminati and fnord? Lorem ipsum is the same deal--one of those inscrutable phrases that just keeps turning up. Surely it means something. Surely it's invested with, you know, mysto power. Lorem ipsum, my children. So mote it be.


\noindent\colorbox{darkgray}{Black text on red background}
mywidth: \the\mywidth columnsep: \the\columnsep colwidth: \the\columnwidth \\

\noindent\colorbox{lightgray}{\makebox[\mywidth][c]{Black text on red background}}

\noindent\begin{tikzpicture}
  \draw node[draw=black,fill=black!20,rounded corners,inner sep=2ex,text width=\mytikzwidth] {
    Lorem ipsum dolor sit amet \dots
    };
\end{tikzpicture}

\definecolor{darkgray}{rgb}{0.95,0.95,0.95}
\lstset{backgroundcolor=\color{darkgray}}
\lstset{columns=fullflexible, basicstyle=\ttfamily,  basicstyle=\tiny, numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=15pt}
\begin{lstlisting}%[frame=tb]
(let ((buffer (url-retrieve-synchronously
           "http://tromey.com/elpa/package-install.el")))
  (save-excursion
    (set-buffer buffer)
    (goto-char (point-min))
    (re-search-forward "^$" nil 'move)  ;;$
    (eval-region (point) (point-masx))
    (kill-buffer (current-buffer))))
\end{lstlisting}

\end{multicols}

\end{document}

09-20 18:16