忽略代码中的西班牙语。问题在于,由于换行符,我得到的then
嵌套子句的缩进不正确。if
\documentclass[11pt, oneside]{article}
\usepackage{algorithm,algpseudocode}
\usepackage{ifthen}
\usepackage{caption}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{ifthen}
\newcommand{\yLuego}{\land _L}
\begin{document}
\begin{itemize}
\algrenewtext{EndIf}{\textbf{fi}}
\item $ filtrarPorMatch(r,c1,c2) =$
\begin{algorithmic}
\If{\o?(r)}
\State \o
\Else
\If{$c1 \in campos(dameUno(r)) \land c2 \in campos(dameUno(r)) \yLuego dameUno(r)[c1] = dameUno(r)[c2]$}
\State $Ag(dameUno(r), filtrarPorMatch(sinUno(r), c1, c2))$
\Else
\State $filtrarPorMatch(sinUno(r), c1, c2)$
\EndIf
\EndIf
\end{algorithmic}
\end{itemize}
\end{document}
有什么解决方法或改进方法吗?我必须补充一点,我是 LaTeX 新手,刚开始了解它的工作原理。
编辑:我是这样解决的,但我不认为这是正确的方法:
\If{$c1 \in campos(dameUno(r)) \land c2 \in campos(dameUno(r)) \yLuego \newline
\hspace*{2em}dameUno(r)[c1] = dameUno(r)[c2]$}
答案1
好吧,我建议\newline
在你的长行中使用“毕竟”这个逻辑断点 -- 意思是“毕竟”\land
和“毕竟” \yLuego
。
在这个问题您可以找到新命令的定义,\parState
例如:
% see https://tex.stackexchange.com/questions/384017/how-to-wrap-lines-correctly-inside-algorithmic-more-indentation-for-children-l
\makeatletter % <=======================================================
\newcommand{\algmargin}{\the\ALG@thistlm}
\makeatother
\algnewcommand{\parState}[1]{\State%
\parbox[t]{\dimexpr\linewidth-\algmargin}{\strut\hangindent=\algorithmicindent \hangafter=1 #1\strut}}
% <=====================================================================
将该代码添加到您的序言中,然后您可以使用以下代码
\If{\parState{$c1 \in campos(dameUno(r)) \land %\newline <==========
c2 \in campos(dameUno(r)) \yLuego %\newline
dameUno(r)[c1] = dameUno(r)[c2]$}}
编写更长的\If
语句。请注意,我在此处注释了包含的内容\newline
。请先尝试此变体并编译以查看结果,然后取消注释命令\newline
,再次编译并检查更改的结果。选择您更喜欢的变体...
请参阅完整的 TeX 代码
\documentclass[11pt, oneside]{article}
\usepackage{showframe} % <==============================================
\usepackage{algorithm,algpseudocode}
\usepackage{ifthen}
\usepackage{caption}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{amssymb}
\newcommand{\yLuego}{\land _L}
% see https://tex.stackexchange.com/questions/384017/how-to-wrap-lines-correctly-inside-algorithmic-more-indentation-for-children-l
\makeatletter % <=======================================================
\newcommand{\algmargin}{\the\ALG@thistlm}
\makeatother
\algnewcommand{\parState}[1]{\State%
\parbox[t]{\dimexpr\linewidth-\algmargin}{\strut\hangindent=\algorithmicindent \hangafter=1 #1\strut}}
% <=====================================================================
\begin{document}
\begin{itemize}
\algrenewtext{EndIf}{\textbf{fi}}
\item $ filtrarPorValor (r, c, v) =$
\begin{algorithmic}
\If{\o?(r)}
\State \o
\Else
\If{\parState{$c1 \in campos(dameUno(r)) \land %\newline <==========
c2 \in campos(dameUno(r)) \yLuego %\newline
dameUno(r)[c1] = dameUno(r)[c2]$}}
\State $Ag(dameUno(r), filtrarPorValor(sinUno(r), c, v))$
\Else
\State $filtrarPorValor(sinUno(r), c, v)$
\EndIf
\EndIf
\end{algorithmic}
\end{itemize}
\end{document}
及其结果:
删除s%
前面的后\newline
,得到改变的结果:
请注意,我使用包showframe
来可视化打字区域和边距。删除它以进行实际工作,它仅用于测试目的...