按照@Roman Starkov 的 \mybox 定义,得到一个紧密的 \fbox (如何在文本+数学环境周围放置一个框架),我想添加一个可选参数来调整 \fbox 内文本周围的 pt 余量。我尝试了以下 MWE,它作为独立命令运行,但 \mybox 命令在包含在我的较大项目中时不会运行:
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\pagestyle{empty}
\usepackage{collectbox}
\makeatletter
\def\mybox{\@ifnextchar[{\@with}{\@without}}
\def\@with[#1]{%
\collectbox{%
\setlength{\fboxsep}{#1pt}%
\fbox{\BOXCONTENT}%
}%
}
\def\@without{%
\collectbox{%
\setlength{\fboxsep}{1pt}%
\fbox{\BOXCONTENT}%
}%
}
\makeatother
\begin{document}
\mybox{A rolling stone gathers no moss.} \par
. \par
\mybox[2]{A rolling stone gathers no moss.} \par
. \par
\mybox[3]{A rolling stone gathers no moss.} \par
\end{document}
上述 MWE 可以作为独立命令正常运行。但是,当包含在我的大型项目(超过 20k 行代码)中时,相同的代码会在代码行处导致以下错误:\mybox[2]{A rolling stone gathers no moss.} \par
任何关于我可以做什么来调试的想法都将不胜感激。
抱歉,没有包含导致上述错误的上述代码版本。
仅供参考,我检查过我的大型项目中没有其他 \mybox 命令。
更新:
@user202729 和 @Simon Dispa:
我对您的解决方案进行了一些调整,以解决方框末尾字符被覆盖的问题。我一开始没有意识到这一点,所以我在 \fbox 后面添加了一个 ~,这似乎已经解决了这个问题。我还将默认 pt 余量设置为 2pt,因为它似乎能给我更多我最初想要的东西,同时仍允许我调整 pt 余量以适应方框文本和周围的段落。
感谢您的解决方案。以下是 \myNewBox 的最终代码:
\newcommand{\myNewBox}[2][]{\ifthenelse{\isempty{#1}}%
{\collectbox{\setlength{\fboxsep}{2pt}\fbox{#2}}~}%
{\collectbox{\setlength{\fboxsep}{#1pt}\fbox{#2}}~}%
}
上述代码现在可以在我的更大的项目中完美运行!
答案1
也许更简单的命令定义将有助于避免冲突。
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\pagestyle{empty}
\usepackage{collectbox}
\makeatletter
\def\mybox{\@ifnextchar[{\@with}{\@without}}
\def\@with[#1]{%
\collectbox{%
\setlength{\fboxsep}{#1pt}%
\fbox{\BOXCONTENT}%
}%
}
\def\@without{%
\collectbox{%
\setlength{\fboxsep}{1pt}%
\fbox{\BOXCONTENT}%
}%
}
\makeatother
\usepackage{xifthen} % added <<<<<<<<<<<<
\newcommand{\myNewBox}[2][]{\ifthenelse{\isempty{#1}}{\setlength{\fboxsep}{0pt}}{\setlength{\fboxsep}{#1pt}}%
\fbox{#2}%
}
\begin{document}
\mybox{A rolling stone gathers no moss.} \par
. \par
\mybox[2]{A rolling stone gathers no moss.} \par
. \par
\mybox[3]{A rolling stone gathers no moss.} \par
\bigskip
\myNewBox{A rolling stone gathers no moss.} \par
. \par
\myNewBox[2]{A rolling stone gathers no moss.} \par
. \par
\myNewBox[3]{A rolling stone gathers no moss.} \par
\end{document}
要在更大的项目中尝试添加\usepackage{xifthen}
和
\renewcommand{\mybox}[2][]{\ifthenelse{\isempty{#1}}{\setlength{\fboxsep}{0pt}}{\setlength{\fboxsep}{#1pt}}%
\fbox{#2}%
}
前 \begin{document}