我编写了一个宏来使用该tagpdf
包标记章节标题。除非我有\tableofcontents
指令,否则它可以正常工作。在这种情况下,任何带星号的部分(例如内容部分本身)都会在目录中用星号替换。我想知道是否有更有经验的 LaTeX 宏编写者可以告诉我我在宏中做错了什么。以下是一个最小可重现的示例。它必须与最新版本的 lualatex 一起运行才能正常工作。
\RequirePackage{pdfmanagement-testphase}
\DeclareDocumentMetadata{testphase=tagpdf,activate=tagging,uncompress}
\documentclass[12pt]{article}
\usepackage{letltxmacro}
\LetLtxMacro{\oldsection}{\section}
\makeatletter
\renewcommand{\section}[1]{%
\@ifstar{%
\tagpdfparaOff\tagstructbegin{tag=H1}\tagmcbegin{tag=H1}%
\oldsection*{#1}\tagmcend\tagstructend\tagpdfparaOn%
}{%
\tagpdfparaOff\tagstructbegin{tag=H1}\tagmcbegin{tag=H1}%
\oldsection{#1}\tagmcend\tagstructend\tagpdfparaOn%
}%
}%
\makeatother
\begin{document}
\tableofcontents
\section{bla}
bla bla bla
\section{bla bla}
bla bla bla
\subsection{bla bla bla}
bla bla bla
\end{document}
答案1
您为 \section 提供了一个参数,然后使用\section*
星号就是这个参数。您\@ifstar
没有做任何有用的事情。类似这样的操作适用于 lualatex(对于 pdflatex,这不是一个好方法,因为标记会影响间距和分页)。
但这只是一个临时的解决方案,直到分段命令能够提供适当的钩子为止。
\RequirePackage{pdfmanagement-testphase}
\DeclareDocumentMetadata{testphase=tagpdf,activate=tagging,uncompress}
\documentclass[12pt]{article}
\NewCommandCopy\oldsection\section
\RenewDocumentCommand\section{som}
{%
\par%ensure that you are in vmode
\tagpdfparaOff\tagstructbegin{tag=H1}\tagmcbegin{tag=H1}%
\IfBooleanTF {#1}%test the star
{%
\IfValueTF{#2}% test the optional argument
{\oldsection*[#2]{#3}}
{\oldsection*{#3}}%
}
{%
\IfValueTF{#2}% test the optional argument
{\oldsection[#2]{#3}}
{\oldsection{#3}}%
}%
\tagmcend\tagstructend\tagpdfparaOn
}
\begin{document}
\tableofcontents
\section{bla}
bla bla bla
\section{bla bla}
bla bla bla
\subsection{bla bla bla}
bla bla bla
\end{document}