恢复我早已忘却的 LaTex 知识,非常感谢您能帮助我实现页边距标题的左对齐或右对齐,具体取决于我们所在的页面。我认为这可能不像我想象的那么简单,而且在布局页面时,LaTex 的信息有一定的依赖性,但不确定。请查看下面的示例
\documentclass[twoside]{scrartcl}
\usepackage[outer=7cm, inner=3cm, marginparwidth=4cm, marginparsep=10mm]{geometry}
\usepackage[top]{mcaption}
\usepackage[font=footnotesize,normal]{caption}
\usepackage{graphicx}
\usepackage{mwe}
\DeclareCaptionJustification{raggedauto}{\ifodd\thepage \raggedright \else \raggedleft \fi}
\captionsetup{labelfont={bf}, font={it,footnotesize}, justification=raggedauto, singlelinecheck=false, position=above}
\begin{document}
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-a}
\end{margincap}
\end{figure}
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-b}
\end{margincap}
\end{figure}
\newpage
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-c}
\end{margincap}
\end{figure}
\end{document}
和
如您所见,我仅在 C 上获得了我想要的正确效果,因为我强制使用了 \newpage。在我的原始文件中,其他类型的部分似乎也正确地重置了“页面侧”。我可以更改什么来自动更正图片 B?谢谢
答案1
欢迎来到 TeX.SE!
当 TeX 处理浮动材料(在figure
环境中)时,它会扩展\thepage
到当前正在处理的页面的编号。但是,根据 LaTeXtable
和figure
环境等浮动的定义,此材料可能会浮动到另一页。但是一旦打包到图中(在 TeX 读取它之后,但在决定将其放在哪里之前),您使用的材料\thepage
就会已经扩大,类似于 TeX 处理完一个\hbox
或一个\vbox
命令后得到的结果。结果,你的\ifodd
条件不再存在,两个代码路径中的一个被保留,另一个被丢弃,所有这些前我们知道浮动材料最终会被放在哪里。确切地说,条件\ifodd
已经根据 TeX 读取figure
材料时正在处理的页面进行了扩展,而不是根据最终将排版该材料的页面进行了扩展。
esdd 为您提供了一个使用 KOMA-Script 命令的解决方案。这是另一个适用于任何类的解决方案。它使用带有选项的changepage
包strict
。加载包后,您唯一要做的就是\DeclareCaptionJustification{raggedauto}{...}
像这样更改您的:
\DeclareCaptionJustification{raggedauto}{%
\checkoddpage
\ifoddpage \raggedright \else \raggedleft \fi
}
这里避免上述问题的技巧是,\checkoddpage
自动将标签放置在使用的位置,并根据此标签中的页码而不是 TeX 在读取此材料时处理的页码进行操作。因此,标签保存的是最近一次编译运行后浮动的\ifoddpage
页码, 1正是您想要的。完整代码:figure
\documentclass[twoside]{scrartcl}
\usepackage[strict]{changepage}
\usepackage[outer=7cm, inner=3cm, marginparwidth=4cm,
marginparsep=10mm]{geometry}
\usepackage[top]{mcaption}
\usepackage[font=footnotesize,normal]{caption}
\usepackage{graphicx}
\usepackage{mwe}
\DeclareCaptionJustification{raggedauto}{%
\checkoddpage
\ifoddpage \raggedright \else \raggedleft \fi
}
\captionsetup{labelfont={bf}, font={it,footnotesize},
justification=raggedauto, singlelinecheck=false, position=above}
\begin{document}
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-a}
\end{margincap}
\end{figure}
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-b}
\end{margincap}
\end{figure}
\newpage
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-c}
\end{margincap}
\end{figure}
\end{document}
在第 1 页:
在第 2 页:
脚注
- 通常,两次编译运行就足以获得稳定的标签;当需要更多编译时,LaTeX 会发出警告,您可能也知道。
答案2
这KOMA-Script 课程提供\Ifthispageodd
:
\documentclass[twoside]{scrartcl}
%\providecommand*\Ifthispageodd{\ifthispageodd}% needed up to and including KOMA-Script version 3.27, see https://komascript.de/faq_deprecatedif
\usepackage[outer=7cm, inner=3cm, marginparwidth=4cm, marginparsep=10mm]{geometry}
\usepackage[top]{mcaption}
\usepackage[font=footnotesize,normal]{caption}
\usepackage{graphicx}
\usepackage{mwe}
\DeclareCaptionJustification{raggedauto}{\Ifthispageodd{\raggedright}{\raggedleft}}% <- changed
\captionsetup{labelfont={bf}, font={it,footnotesize}, justification=raggedauto, singlelinecheck=false, position=above}
\begin{document}
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-a}
\end{margincap}
\end{figure}
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-b}
\end{margincap}
\end{figure}
% \newpage% <- not needed
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-c}
\end{margincap}
\end{figure}
\end{document}
运行两次即可获得
软件包scrextend
还提供\Ifthispageodd
。因此,你可以将其与标准班, 也:
\documentclass[twoside
,11pt% <- added, same fontsize as default for KOMA-Script classes
]{article}
\usepackage{scrextend}% <- added, provides \Ifthispageodd
%\providecommand*\Ifthispageodd{\ifthispageodd}% needed up to and including KOMA-Script version 3.27, see https://komascript.de/faq_deprecatedif
\usepackage[outer=7cm, inner=3cm, marginparwidth=4cm, marginparsep=10mm]{geometry}
\usepackage[top]{mcaption}
\usepackage[font=footnotesize,normal]{caption}
\usepackage{graphicx}
\usepackage{mwe}
\DeclareCaptionJustification{raggedauto}{\Ifthispageodd{\raggedright}{\raggedleft}}% <- changed
\captionsetup{labelfont={bf}, font={it,footnotesize}, justification=raggedauto, singlelinecheck=false, position=above}
\begin{document}
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-a}
\end{margincap}
\end{figure}
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-b}
\end{margincap}
\end{figure}
% \newpage% <- not needed
\begin{figure}[htb]
\begin{margincap}
\caption{This is my caption}
\includegraphics[width=\textwidth]{example-image-c}
\end{margincap}
\end{figure}
\end{document}