如何自动将首字母缩略词的第二个字母与上方行上的“浮动”符号对齐

如何自动将首字母缩略词的第二个字母与上方行上的“浮动”符号对齐

考虑MWE:

\documentclass{book}
\usepackage{xcolor}
\newcommand{\myred}[1]{\textcolor{red}{#1}}

\begin{document}
\LARGE
\noindent \textbf{(10)} * \\[-2pt]
\textbf{A.B.C.}

\vspace{15pt}

\noindent \textbf{(1020)} * \\[-2pt]
\textbf{J.Y.Z.}

\vspace{15pt}

\noindent \textbf{(573)} * \\[-2pt]
\textbf{X.Y.Z.}

\vskip 30pt

\noindent \myred{\textbf{(10)} * \\[-2pt]
\hspace*{12pt} \textbf{A.B.C.}}

\vspace{15pt}

\noindent \myred{\textbf{(1020)} * \\[-2pt]
\hspace*{34pt} \textbf{J.Y.Z.}}

\vspace{15pt}

\noindent \myred{\textbf{(573)} * \\[-2pt]
\hspace*{20pt} \textbf{X.Y.Z.}}
\end{document}

和出局

在此处输入图片描述

前三行(黑色)表示括号内的数字后跟符号的示例,在本例中用星号表示。

尽管 MWE 中的星号位于所含数字右侧固定的空间内,但在实际文档中不一定如此;即,它可以漂浮

我必须将下面缩写词中的第二个首字母与上面的星号对齐。

我用红色表示它应该是什么样子。

唉,为了做到这一点,这是一个不断尝试的过程。

如果可能的话,我想使这个过程自动化。

问题:这是否可能?如果可以,我该如何自动将首字母缩略词中的第二个字母(每个字母后面有一个点)与上面的符号(始终固定,但在本例中为星号)对齐,该符号始终出现在所含数字的右侧,但不一定与它保持统一的距离?

谢谢。

答案1

在此处输入图片描述

\documentclass{book}

\def\zz#1{%
\begin{tabular}[t]{@{}c@{}}*\\\bfseries\zzz#1\relax\end{tabular}}
\def\zzz#1.#2.#3\relax{\llap{#1.}#2\rlap{.#3}}
\begin{document}
\LARGE
\noindent \textbf{(10)} \zz{A.B.C} 


\vspace{15pt}

\noindent \textbf{(1020)} \zz{J.Y.Z.}

\vspace{15pt}

\noindent \textbf{(573)} \zz{X.Y.Z.}

\vspace{15pt}

\noindent \textbf{(573)}  some other text \zz{X.Y.Z.}

\end{document}

这是在表格中设置文本,同时隐藏除第二个字母之外的文本宽度。

答案2

您可以使用该zref包及其savepos模块:

\documentclass{book} 
\usepackage{xcolor} \newcommand{\myred}[1]{\textcolor{red}{#1}}

\usepackage{zref-savepos}

\newcounter{alignmark}
\setcounter{alignmark}{0}

\AtBeginDocument{\zsaveposx{alignmargin}}%

\newcommand{\setalignmark}{%
    \stepcounter{alignmark}%
    \zsaveposx{alignmark\roman{alignmark}}%
}

\newcommand{\alignatmark}[3][\roman{alignmark}]{%
    \hspace*{\dimexpr\zposx{alignmark#1}sp-\zposx{alignmargin}sp\relax}\llap{#2}#3%
}

\begin{document}
\LARGE
\noindent \textbf{(10)} \setalignmark * \\[-2pt]
\alignatmark{\textbf{A.}}{\textbf{B.C.}}

\vspace{15pt}

\noindent \textbf{(1020)} \setalignmark * \\[-2pt]
\alignatmark{\textbf{J.}}{\textbf{Y.Z.}}

\end{document}

在此处输入图片描述

使用该savepos模块,您可以保存页面上的当前位置,然后获取此位置,例如移动某些内容。请注意,位置是从页面左下角计算的。因此,在此示例中,我们需要考虑左边距。如果偶数页和奇数页的边距不同,则此方法需要进行一些调整。

相关内容