Стиль многоколоночного глоссария с описаниями, размещенными в отдельных колонках

Стиль многоколоночного глоссария с описаниями, размещенными в отдельных колонках

Я пытаюсь создать многоколоночный стиль глоссария (с помощью glossaries), который сможет обрабатывать длинные описания, но я не очень хорошо знаком с тем, как писать стиль глоссария, и не совсем понимаю, как это осуществить.

Мне бы хотелось иметь глоссарий с четырьмя столбцами; две пары аббревиатуры и описания. Если описание занимает больше одной строки, описание должно переноситься только в пределах своей собственной колонки, а колонка аббревиатуры должна пропускать столько строк, сколько необходимо, чтобы каждая аббревиатура была выровнена с началом ее описания.

Все, что я знаю, как сделать, это создать два полных столбца и вручную отделить аббревиатуру от описания; с помощью этого кода (который, я почти уверен, я скопировал из StackExchange некоторое время назад):

\newglossarystyle{glossabbr}{%
\renewenvironment{theglossary}%
{\begin{multicols}{2}\raggedright}
    {\end{multicols}}

\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{}
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glsclearpage}{} 

% set how each entry should appear:
\renewcommand*{\glossentry}[2]{
    \noindent\makebox[7em][l]{\glstarget{##1}{\textsc{\glossentryname{##1}}}}
    \glossentrydesc{##1}\\
}
\renewcommand*{\subglossentry}[3]{%
    \glossentry{##2}{##3}
}
}

Проблема с этим кодом в том, что когда у вас длинное описание, оно просто переносится в столбец сокращений, потому что LaTeX не обрабатывает сокращение и описание как отдельные блоки. Вы можете увидеть проблему здесь, выделенную красным:

Глоссарий с неправильным переносом слов

В конечном счете, все, что я хотел бы сделать, это просто взять эти обернутые биты описания (биты не в маленьких заглавных буквах) и засунуть их, ограничив их в колонке для описаний и оставив пробелы в колонке сокращений, где они находятся прямо сейчас. Как мне это сделать?

MWE с проблемным стилем глоссария:

\documentclass{article}

\usepackage[acronym,nomain]{glossaries}
\setacronymstyle{long-sc-short}
\makeglossaries

\newacronym
{inform}{inform}{informative illocutionary force}
\newacronym
{point}{point}{demonstrative illocutionary force}

\usepackage{multicol}
\newglossarystyle{glossabbr}{%
    \renewenvironment{theglossary}%
    {\begin{multicols}{2}\raggedright}
        {\end{multicols}}
    
    \renewcommand*{\glossaryheader}{}
    \renewcommand*{\glsgroupheading}[1]{}
    \renewcommand*{\glsgroupskip}{}
    \renewcommand*{\glsclearpage}{} 
    
    % set how each entry should appear:
    \renewcommand*{\glossentry}[2]{
        \noindent\makebox[7em][l]{\glstarget{##1}{\textsc{\glossentryname{##1}}}}
        \glossentrydesc{##1}\\
    }
    \renewcommand*{\subglossentry}[3]{%
        \glossentry{##2}{##3}
    }
}

\begin{document}

\glsunsetall

\gls{point}

\gls{inform}

\printglossary[style=glossabbr]

\end{document}

решение1

Это должно стать хорошим началом для комплексного решения:

\documentclass{article}

\usepackage[acronym,nomain]{glossaries}
\setacronymstyle{long-sc-short}
\makeglossaries

\newacronym
{inform}{inform}{informative illocutionary force}
\newacronym
{point}{point}{demonstrative illocutionary force}

\usepackage{multicol}
\newglossarystyle{glossabbr}{%
    \renewenvironment{theglossary}%
    {\begin{multicols}{2}\raggedright}
        {\end{multicols}}
    
    \renewcommand*{\glossaryheader}{}
    \renewcommand*{\glsgroupheading}[1]{}
    \renewcommand*{\glsgroupskip}{}
    \renewcommand*{\glsclearpage}{} 
    
    % set how each entry should appear:
    \renewcommand*{\glossentry}[2]{
        \noindent\makebox[7em][l]{\glstarget{##1}%
            {\begin{minipage}[t]{0.2\textwidth}
                \textsc{\glossentryname{##1}}
            \end{minipage}
        }}
        \begin{minipage}{0.2\textwidth}
        \glossentrydesc{##1}
        \end{minipage}\\
    }
    \renewcommand*{\subglossentry}[3]{%
        \glossentry{##2}{##3}
    }
}

\begin{document}

\glsunsetall

\gls{point}

\gls{inform}

\printglossary[style=glossabbr]

\end{document}

Обратите внимание на добавленные minipageсреды вокруг glossentrynameи glossentrydesc. Это своего рода сырой обходной путь.

Вам следует попробовать настроить среду под свои нужды — ширину можно увеличить (возможно, но это выглядит приемлемо), и у меня возникли проблемы с установкой вертикального выравнивания записи глоссария по верху, а не по центру.

Я оставляю это на ваше усмотрение ;)

Связанный контент